题目描述
思路
class Solution:
def findBestValue(self, arr: List[int], target: int) -> int:
left, right = 0, max(arr)
diff_value, res = float("inf"), -1
while left < right: # 跳出循环时, left为计算的total大于target的第一个值
mid = left + (right - left) // 2
total = sum(min(one, mid) for one in arr)
if total <= target:
left = mid + 1
else:
right = mid
# 最终的结果 要么为left 要么为left-1
total_1 = sum(min(one, left) for one in arr)
total_2 = sum(min(one, left-1) for one in arr)
return left if abs(total_1-target) < abs(total_2-target) else left-1