leetcode1300. 转变数组后最接近目标值的数组和
生活随笔
收集整理的這篇文章主要介紹了
leetcode1300. 转变数组后最接近目标值的数组和
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給你一個(gè)整數(shù)數(shù)組 arr 和一個(gè)目標(biāo)值 target ,請(qǐng)你返回一個(gè)整數(shù) value ,使得將數(shù)組中所有大于 value 的值變成 value 后,數(shù)組的和最接近 target (最接近表示兩者之差的絕對(duì)值最小)。
如果有多種使得和最接近 target 的方案,請(qǐng)你返回這些整數(shù)中的最小值。
請(qǐng)注意,答案不一定是 arr 中的數(shù)字。
示例 1:
輸入:arr = [4,9,3], target = 10
輸出:3
解釋:當(dāng)選擇 value 為 3 時(shí),數(shù)組會(huì)變成 [3, 3, 3],和為 9 ,這是最接近 target 的方案。
代碼
class Solution {public int findBestValue(int[] arr, int target) {int n=arr.length,l=0,r=0;for(int c:arr){r= Math.max(r,c);}while (l<=r)//二分查找{int mid=(r-l)/2+l;int sum=0;for(int c:arr)//計(jì)算數(shù)組和{if(c>mid)sum+=mid;else sum+=c;}if(sum==target)return mid;else if(sum>target)r=mid-1;else l=mid+1;}int lSum=0,rSum=0;//比較左右區(qū)間,找出更接近目標(biāo)值的點(diǎn)for(int c:arr){if(c>l)lSum+=l;else lSum+=c;if(c>r)rSum+=r;else rSum+=c;}return Math.abs(target-rSum)> Math.abs(target-lSum)?l:r;} }總結(jié)
以上是生活随笔為你收集整理的leetcode1300. 转变数组后最接近目标值的数组和的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 梦到书包被偷了是什么意思
- 下一篇: leetcode491. 递增子序列(回