【力扣】1300:轉變數組後最接近目標值的數組和

算法思路

給你一個整數數組 arr 和一個目標值 target ,請你返回一個整數 value ,使得將數組中所有大於 value 的值變成 value 後,數組的和最接近 target (最接近表示兩者之差的絕對值最小)。

如果有多種使得和最接近 target 的方案,請你返回這些整數中的最小值。

請注意,答案不一定是 arr 中的數字。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sum-of-mutated-array-closest-to-target
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

算法思路

class Solution:
    def findBestValue(self, arr: List[int], target: int) -> int:
        arr.sort()
        return self.hel(arr,target)

    def hel(self,arr,target):
        n=len(arr)
        z=target/n
        if z==arr[0]:return arr[0]
        elif z<arr[0]:
            if z-int(z)>0.5:
                return int(z)+1
            else:
                return int(z)
        elif z>arr[0]:
            i=0
            while z>arr[i]:
                target-=arr[i]
                n-=1
                if n==0:return arr[-1]
                z=target/n
                i+=1
            # if n==1:return arr[-1]
            return self.hel(arr[i:],target)

執行用時 :44 ms, 在所有 Python3 提交中擊敗了98.92%的用戶
內存消耗 :15 MB, 在所有 Python3 提交中擊敗了25.00%的用戶

class Solution:
    def findBestValue(self, arr: List[int], target: int) -> int:
        arr.sort()
        self.arr=arr
        return self.hel(0,len(arr),target)

    def hel(self,i,n,target):
        z=target/n
        if z==self.arr[i]:return self.arr[i]
        elif z<self.arr[i]:
            if z-int(z)>0.5:
                return int(z)+1
            else:
                return int(z)
        elif z>self.arr[i]:
            while z>self.arr[i]:
                target-=self.arr[i]
                n-=1
                if n==0:return self.arr[-1]
                z=target/n
                i+=1
            # if n==1:return arr[-1]
            return self.hel(i,n,target)

執行用時 :40 ms, 在所有 Python3 提交中擊敗了99.46%的用戶
內存消耗 :14.8 MB, 在所有 Python3 提交中擊敗了25.00%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章