【2022-12-16每日一题】1785. 构成特定和需要添加的最少元素[Medium]
2022-12-16
1分钟阅读时长
2022-12-16每日一题:1785. 构成特定和需要添加的最少元素
难度:Medium
标签:贪心 、 数组
给你一个整数数组 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
方法一:累加和+贪心
写法一
func minElements(nums []int, limit int, goal int) int {
sum := 0
for _, num := range nums {
sum += num
}
goal -= sum
if goal < 0 {
goal = -goal
}
return (goal + limit - 1) / limit // 向上取整
}
写法二
func minElements(nums []int, limit, goal int) int {
sum := 0
for _, x := range nums {
sum += x
}
diff := abs(sum - goal)
return (diff + limit - 1) / limit // 向上取整
}
func abs(x int) int {
if x < 0 {
return -x
}
return x
}
复杂度分析
- 时间复杂度:$O(n)$。
- 空间复杂度:$O(1)$。