算法思路
給你一個整數數組 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%的用戶