标签:tmp arr 1300 target helper int res 数组 leetcode
题目描述:
解法一:二分法 提交:O(nlogn)
class Solution: def findBestValue(self, arr: List[int], target: int) -> int: def helper(num): res = 0 for i in arr: if i > num: res += num else: res += i return res l,r = 0,min(target,max(i for i in arr)) while l + 1 < r: mid = l - (l-r)//2 if helper(mid) < target: l = mid else: r = mid if abs(helper(l) - target) > abs(helper(r) - target): return r else: return l
方法二:排序 提交: O(nlogn)
class Solution: def findBestValue(self, arr: List[int], target: int) -> int: arr.sort() n = len(arr) tmp = 0 for i in range(n): if tmp + arr[i] * n < target: tmp += arr[i] n -= 1 elif tmp + arr[i] * n < target: return arr[i] else: t = target - tmp ans = t // n if t - ans * n <= (ans + 1) *n - t: return ans else: return ans + 1 return arr[-1]
java:
class Solution { public int findBestValue(int[] arr, int target) { Arrays.sort(arr); int len = arr.length; int curSum = 0; for (int i = 0; i < len; i++) { int curAve = (target - curSum) / (len - i); if (curAve <= arr[i]) { //即判断curAve两边 double curAveDou = (target * 1.0 - curSum) / (len - i); if (curAveDou - curAve <= 0.5) { return curAve; } else { return curAve + 1; } } curSum += arr[i]; } return arr[len - 1]; } }
标签:tmp,arr,1300,target,helper,int,res,数组,leetcode 来源: https://www.cnblogs.com/oldby/p/13128540.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。