当前位置: 首页 > 后端技术 > Python

LeetCode1300.改变数组后的数组和最接近的目标值-蟒蛇

时间:2023-03-26 19:15:29 Python

1300。改变数组最接近目标值后的数组和题源:力扣(LeetCode)https://leetcode-cn.com/problems/题目sum-of-mutated-array-closest-to-target给出你一个整型数组arr和一个目标值target,请返回一个整型值,这样数组中所有大于value的值都改成value后,数组的和Closesttotarget(最接近的意思是绝对值两者之间的差异是最小的)。如果有多个解使和最接近目标,请返回这些整数中最小的值。请注意,答案不一定是arr中的数字。示例1:输入:arr=[4,9,3],target=10输出:3解释:选择value为3时,数组变为[3,3,3],和为9,即最近目标的计划。示例2:输入:arr=[2,3,5],target=10输出:5示例3:输入:arr=[60864,25176,27249,21296,20204],target=56803输出:11361提示:1<=arr.length<=10^41<=arr[i],target<=10^5解题思路:二分查找在这道题中,解题难度可能会比较大【value是整数,数组并接近目标]和[答案不一定是arr中的数字]。也就是说,题目让我们问的是最接近的。那么现在的问题可以换成考虑如何判断的方法吗?最接近的可能情况如下:选择一个值,变换后数组和等于target。(当然,这是最理想的情况)如果选择的值太大,接近度变小;如果选择的值太小,接近度会变大。第二和第三种情况反过来也可能成立。如何考虑第二种和第三种情况,本文采用的解决方案是确定上下边界,取可能的值进行比较。具体方法:先确定一个值,对数组进行变换,如果求和可以使变换后的数组求和为第一个大于等于目标的,则判断上下边界,因为该值是整数,则最后的答案可能落在value中,也可能是value-1。具体代码实现如下。代码实现类Solution:deffindBestValue(self,arr:List[int],target:int)->int:defcacl_change_sum(arr,value):res=0#大于value的值需要改变为numinarr:res+=min(num,value)returnresleft=0right=max(arr)whileleft