1
1
class Solution :
2
2
MOD = 10 ** 9 + 7
3
+
3
4
def solve (self , k ):
4
5
sumDifferences = k * len (self .nums ) - self .sumNums
5
6
ones = max (2 * (k - self .minNums ) - sumDifferences , 0 )
6
7
if (sumDifferences - ones ) & 1 != 0 :
7
8
ones += 1
8
9
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
+
10
14
cost2 = min (2 * cost1 , cost2 )
11
15
self .nums = nums
12
16
self .minNums = min (nums )
@@ -16,6 +20,10 @@ def minCostToEqualizeArray(self, nums: List[int], cost1: int, cost2: int) -> int
16
20
m = max (nums )
17
21
sameParity = range (m , 10 ** 18 , 2 )
18
22
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
+ )
21
29
return min (self .solve (sameParity [i ]), self .solve (diffParity [j ])) % Solution .MOD
0 commit comments