原题链接
题解
直接手动模拟过去,时间复杂度为O(n)
代码如下
class Solution {
public:
vector<int> distributeCandies(int candies, int num_people) {
vector<int> res(num_people, 0);
int idx = 0, ans = 1;
while(candies > 0){
if(ans <= candies)
res[idx ++] += ans, candies -= ans, ans ++;
else res[idx ++] += candies, candies = 0;
if(idx == num_people) idx = 0;
}
return res;
}
};
其实我们可以发现,每次应该分的的糖果数减一mod人数(假设人的编号从0开始),就是我们的人的编号,即数组下标
代码如下
class Solution {
public:
vector<int> distributeCandies(int candies, int num_people) {
vector<int> res(num_people, 0);
int ans = 0;
while(candies > 0){
res[ans % num_people] += min(ans + 1, candies);//要注意C++中先进行运算的是右边
candies -= ++ ans;
}
return res;
}
};