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

提示:
1 <= nums.length <= 105
1 <= limit <= 106
-limit <= nums[i] <= limit
-109 <= goal <= 109

方法1:
主要思路:解题链接汇总
(1)贪心;
(2)先将原数组中的所有的元素进行求和,将该和减去goal,若是已经为0,则说明不用插入新的元素,直接返回0;
(3)否则, 对该值取绝对值,然后将该值除以limit得到res,再判断该值是否能够整除limit,若不能,需要对res再自增1;

class Solution {
public:
    int minElements(vector<int>& nums, int limit, int goal) {
        long long cur_goal=0;
        for(int&i:nums){//对原数组进行求和
            cur_goal+=i;
        }
        
        cur_goal-=goal;//获得差值
        if(cur_goal==0){//若是已经为0,则说明不用插入新的元素
            return 0;
        }
        cur_goal=abs(cur_goal);//否则对该差值取绝对值
        //判断该差值可以由多少个元素组成
        int res=cur_goal/limit;
        if(cur_goal%limit!=0){
            ++res;
        }
        return res;
    }
};

go语言实现

func minElements(nums []int, limit int, goal int) int {
    var cur_goal int 
    for _,v := range nums {
        cur_goal+=v
    }
    cur_goal-=goal
    if cur_goal==0 {
        return 0
    }
    if cur_goal<0 {
        cur_goal=-cur_goal
    }
    res :=cur_goal/limit
    if cur_goal%limit!=0{
        res++
    }
    return res
}

你可能感兴趣的:(LeetCode)