1.題目描述
給你一個整數(shù)數(shù)組 nums ,和兩個整數(shù) limit 與 goal 耿币。數(shù)組 nums 有一條重要屬性:abs(nums[i]) <= limit 。
返回使數(shù)組元素總和等于 goal 所需要向數(shù)組中添加的 最少元素數(shù)量 十性,添加元素 不應(yīng)改變 數(shù)組中 abs(nums[i]) <= limit 這一屬性塑悼。
注意,如果 x >= 0 厢蒜,那么 abs(x) 等于 x ;否則愕贡,等于 -x 巷屿。
示例 1:
輸入:nums = [1,-1,1], limit = 3, goal = -4
輸出:2
解釋:可以將 -2 和 -3 添加到數(shù)組中,數(shù)組的元素總和變?yōu)?1 - 1 + 1 - 2 - 3 = -4 憨琳。
示例 2:
輸入:nums = [1,-10,9,1], limit = 100, goal = 0
輸出:1
2.解題思路與代碼
2.1 解題思路
這道題目我們需要先計算出數(shù)組 nums 的總和旬昭,然后計算與 goal 差值的絕對值。在得到目標(biāo)差值 target 之后稳懒,就需要與 limit 進(jìn)行比較了。如果 target<=limit 墅冷,那么就只需要放入一個等于 target 的數(shù)即可,如果 target>limit 的時候要讓放入數(shù)字個數(shù)最少寞忿,那么我們肯定就從能添加的最大的數(shù) limit 開始放顶岸,放入個數(shù)為 ans=target/limit 個叫编,此時如果恰好沒有剩余的數(shù)搓逾,直接返回 ans 即可杯拐,還有剩余,那么這個剩余數(shù)一定是小于 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 測試結(jié)果
通過測試
3.總結(jié)
- 注意使用 long 存放總和余掖,避免越界