LeetCode 每日一题——1785. 构成特定和需要添加的最少元素

1.题目描述

1785. 构成特定和需要添加的最少元素

给你一个整数数组 nums ,和两个整数 limit 与 goal 。数组 nums 有一条重要属性:abs(nums[i]) <= limit 。

返回使数组元素总和等于 goal 所需要向数组中添加的 最少元素数量 ,添加元素 不应改变 数组中 abs(nums[i]) <= limit 这一属性。

注意,如果 x >= 0 ,那么 abs(x) 等于 x ;否则,等于 -x 。

示例 1:

输入:nums = [1,-1,1], limit = 3, goal = -4
输出:2
解释:可以将 -2 和 -3 添加到数组中,数组的元素总和变为 1 - 1 + 1 - 2 - 3 = -4 。

示例 2:

输入:nums = [1,-10,9,1], limit = 100, goal = 0
输出:1

2.解题思路与代码

2.1 解题思路

这道题目我们需要先计算出数组 nums 的总和,然后计算与 goal 差值的绝对值。在得到目标差值 target 之后,就需要与 limit 进行比较了。如果 target<=limit ,那么就只需要放入一个等于 target 的数即可,如果 target>limit 的时候要让放入数字个数最少,那么我们肯定就从能添加的最大的数 limit 开始放,放入个数为 ans=target/limit 个,此时如果恰好没有剩余的数,直接返回 ans 即可,还有剩余,那么这个剩余数一定是小于 limit 的也就是说需要在放入一次,即返回 ans+1。

2.2 代码

class Solution {
    public int minElements(int[] nums, int limit, int goal) {
        long sum = 0;
        for (int num : nums) {
            sum += num;
        }
        long target = Math.abs(goal - sum);
        int ans = (int) (target / limit);
        return target % limit == 0 ? ans : ans + 1;
    }
}

2.3 测试结果

通过测试

测试结果

3.总结

  • 注意使用 long 存放总和,避免越界
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容