leetcode1300-转变数组后最接近目标值的数组和

原题

给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。

如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。

请注意,答案不一定是 arr 中的数字。

示例 1:

输入: arr = [4,9,3], target = 10
输出: 3
解释: 当选择 value 为 3 时,数组会变成 [3, 3, 3],和为 9 ,这是最接近 target 的方案。

示例 2:

输入: arr = [2,3,5], target = 10
输出: 5

示例 3:

输入: arr = [60864,25176,27249,21296,20204], target = 56803
输出: 11361

提示:

  • 1 <= arr.length <= 10^4
  • 1 <= arr[i], target <= 10^5

解法

思想

先排序,然后遍历累加,如果到某个元素的时候,若后面都加这个数,总和会大于target,说明这个数及后面的数都应该被削减。削减的值算一下平均数就好。

代码

class Solution {
    public int findBestValue(int[] arr, int target) {
        Arrays.sort(arr);
        //已算入的总和
        int sum = 0;
        for(int i = 0;i < arr.length;i++){
            int leftCount = arr.length-i;
            int extra = sum+arr[i]*leftCount-target;
            if(extra>=0){
                // 算一个后面累加最接近target的平均值
                return arr[i]-extra/leftCount-(2*(extra%leftCount)>=leftCount?1:0);
            }
            sum+=arr[i];
        }
        return arr[arr.length-1];
    }
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode1300-%e8%bd%ac%e5%8f%98%e6%95%b0%e7%bb%84%e5%90%8e%e6%9c%80%e6%8e%a5%e8%bf%91%e7%9b%ae%e6%a0%87%e5%80%bc%e7%9a%84%e6%95%b0%e7%bb%84%e5%92%8c/

(0)
彭晨涛彭晨涛管理者
上一篇 2020年6月13日 19:26
下一篇 2020年6月15日

相关推荐

  • leetcode999-车的可用捕获量

    原题 999. 车的可用捕获量 - 力扣(LeetCode) 解法 思想 这道题题目有点难理解,其实就是上下左右搜索,质量有点低了。 代码 class Solution { cha…

    算法 2020年3月26日
    070
  • leetcode322-零钱兑换

    原题 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1…

    算法 2020年3月8日
    0150
  • leetcode82-删除排序链表中的重复元素II

    原题 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 示…

    算法 2020年5月31日
    0240
  • leetcode1111-有效括号的嵌套深度

    原题 有效括号字符串 仅由 "(" 和 ")" 构成,并符合下述几个条件之一: 空字符串 连接,可以记作 AB(A 与 B 连接),其中 A 和 B 都是有效括号字符串 嵌套,可以…

    算法 2020年4月1日
    0100
  • leetcode200-岛屿数量

    原题 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水…

    算法 2019年11月24日
    0150
  • leetcode27-移除元素

    原题 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(…

    算法 2019年11月20日
    080
  • leetcode77-组合

    原题 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], […

    算法 2020年5月12日
    0650
  • leetcode205-同构字符串

    原题 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺…

    算法 2019年12月21日
    0230
  • leetcode279-完全平方数

    原题 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出…

    2019年12月11日
    0150
  • 二叉树中序遍历-折纸问题

    原题(来源牛客网) 请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯…

    2020年4月27日
    02660

发表回复

登录后才能评论