贪心
统计所有元素的加和
s
u
m
sum
sum ,计算
s
u
m
sum
sum 到
g
o
a
l
goal
goal 的距离,尽可能用
l
i
m
i
t
limit
limit 的步长去走这段距离(贪心),最后一步可能是
1
1
1 ~
l
i
m
i
t
limit
limit 。
C
+
+
C++
C++ 的除法是向
0
0
0 取整,为了统计最后一步,我们要上取整。
上取整归一化 :
(diff+limit-1)/limit
上取整写法不唯一,取模也行。
class Solution {
public:
int minElements(vector<int>& nums, int limit, int goal) {
long long sum = 0;
for(auto &x:nums) sum += x;
long long diff = abs(sum - goal);
return (diff+limit-1)/limit;
}
};
- 时间复杂度 : O ( n ) O(n) O(n) , n n n 是数字数量,统计数字总和的时间复杂度 O ( n ) O(n) O(n) 。
- 空间复杂度 : O ( 1 ) O(1) O(1) , 除去答案使用的线性空间,只使用常数级空间 。
AC
致语
- 理解思路很重要
- 读者有问题请留言,清墨看到就会回复的。