题意:
给你一个整数数组 nums ,和两个整数 limit 与 goal 。
数组 nums 有一条重要属性:abs(nums[i]) <= limit 。
返回使数组元素总和等于 goal 所需要向数组中添加的 最少元素数量 ,
添加元素 不应改变 数组中 abs(nums[i]) <= limit 这一属性。
注意,如果 x >= 0 ,那么 abs(x) 等于 x ;否则,等于 -x 。
数据范围:
1 <= nums.length <= 1e5
1 <= limit <= 1e6
-limit <= nums[i] <= limit
-1e9 <= goal <= 1e9
解法:
对nums数组求和,设sum和target的差值为dif,(dif是绝对值,因此>=0),
那么ans=dif/limit+(dif%limit!=0).
code:
class Solution {
public:
int minElements(vector<int>& a, int x, int t) {
int n=a.size();
long long sum=0;
for(auto i:a)sum+=i;
long long dif=abs(t-sum);
int ans=0;
ans+=dif/x;
if(dif%x)ans++;
return ans;
}
};