zoukankan      html  css  js  c++  java
  • 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更近。

     

  • 相关阅读:
    Vue 04
    Vue小练习 03
    Vue 03
    Vue小练习 02
    Vue 02
    Vue 小练习01
    Vue 01
    Django 11
    JUC(一):volatile关键字
    Kubernetes【K8S】(五):Service
  • 原文地址:https://www.cnblogs.com/2014slx/p/13128475.html
Copyright © 2011-2022 走看看