每日一题https://leetcode-cn.com/problems/sum-of-mutated-array-closest-to-target/submissions/
首先查找问题不难想到二分法,二分法的判断函数也非常简单,就是计算满足条件的数组元素和sum和target的关系。定义左右边界l=0和r=max(arr),当sum<=target的时候,结果应该在[mid,r]区间内;否则,结果应该在[l,mid-1]区间内。
class Solution(object): def findBestValue(self, arr, target): left=0 right=max(arr) sub,ans=float("inf"),float("inf") while left<=right: mid=(left+right)//2 tmp=0 for num in arr: if(num>mid): tmp=mid+tmp else: tmp=tmp+num cur_sub=abs(tmp-target) if cur_sub < sub: sub = cur_sub ans = mid elif cur_sub == sub: ans = min(ans, mid) if tmp > target: right = mid - 1 elif tmp < target: left = mid + 1 elif tmp == target: return mid return ans
当我们查找到最后的位置时,此时sum<=target,我们还需要判断此时l+1对应的sum是不是离target更近。