11class Solution :
22 MOD = 10 ** 9 + 7
3+
34 def solve (self , k ):
45 sumDifferences = k * len (self .nums ) - self .sumNums
56 ones = max (2 * (k - self .minNums ) - sumDifferences , 0 )
67 if (sumDifferences - ones ) & 1 != 0 :
78 ones += 1
89 return ones * self .cost1 + ((sumDifferences - ones ) // 2 ) * self .cost2
9- def minCostToEqualizeArray (self , nums : List [int ], cost1 : int , cost2 : int ) -> int :
10+
11+ def minCostToEqualizeArray (self , nums : list [int ], cost1 : int , cost2 : int ) -> int :
12+ from bisect import bisect_left
13+
1014 cost2 = min (2 * cost1 , cost2 )
1115 self .nums = nums
1216 self .minNums = min (nums )
@@ -16,6 +20,10 @@ def minCostToEqualizeArray(self, nums: List[int], cost1: int, cost2: int) -> int
1620 m = max (nums )
1721 sameParity = range (m , 10 ** 18 , 2 )
1822 diffParity = range (m + 1 , 10 ** 18 , 2 )
19- i = bisect_left (sameParity , 0 , key = lambda i : self .solve (i + 2 ) - self .solve (i ))
20- j = bisect_left (diffParity , 0 , key = lambda j : self .solve (j + 2 ) - self .solve (j ))
23+ i = bisect_left (
24+ sameParity , 0 , key = lambda i : self .solve (i + 2 ) - self .solve (i )
25+ )
26+ j = bisect_left (
27+ diffParity , 0 , key = lambda j : self .solve (j + 2 ) - self .solve (j )
28+ )
2129 return min (self .solve (sameParity [i ]), self .solve (diffParity [j ])) % Solution .MOD
0 commit comments