1300. Sum of Mutated Array Closest to Target (Medium) - TengnanYao/daily_leetcode GitHub Wiki
class Solution(object):
def findBestValue(self, arr, target):
"""
:type arr: List[int]
:type target: int
:rtype: int
"""
def getSum(val):
i = bisect.bisect_right(arr, val)
return (0 if i == 0 else preSum[i - 1]) + (len(arr) - i) * val
arr.sort()
preSum = arr[ : ]
for i in range(len(arr) - 1):
preSum[i + 1] += preSum[i]
l, r = 0, max(arr)
while l <= r:
m = (l + r) // 2
s = getSum(m)
if s == target:
return m
elif s < target:
l = m + 1
else:
r = m - 1
return l if abs(getSum(l) - target) < abs(getSum(l - 1) - target) else l - 1