6.14

每日一题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更近。

 

原文地址:https://www.cnblogs.com/2014slx/p/13128475.html