题目描述:
给你一个整数数组 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
}