1
# Runtime: 1506 ms (Top 29.6%) | Memory: 34.22 MB (Top 74.0%)6
self, nums1: List[int], nums2: List[int], k1: int, k2: int9
k = k1 + k2 # can combine k's because items can be turned negative10
diffs = sorted((abs(x - y) for x, y in zip(nums1, nums2)))12
# First binary search to find our new max for our diffs array17
# steps needed to reduce all nums greater than newMax18
steps = sum(max(0, num - mid) for num in diffs)26
k -= sum(max(0, num - newMax) for num in diffs) # remove used k28
# Second binary search to find first index to replace with max val32
if diffs[mid] < newMax:37
# Replace items at index >= l with newMax38
diffs = diffs[:l] + [newMax] * (n - l)40
# Use remaining steps to reduce overall score41
for i in range(len(diffs) - 1, -1, -1):42
if k == 0 or diffs[i] == 0:47
return sum(diff * diff for diff in diffs)