题目描述
我们买了一些糖果 candies
,打算把它们分给排好队的 **n = num_people
**个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n
颗糖果。然后,我们再回到队伍的起点,给第一个小朋友 n + 1
颗糖果,第二个小朋友 n + 2
颗,依此类推,直到给最后一个小朋友 2 * n
颗糖果。以此类推。返回一个长度为 num_people
、元素之和为 candies
的数组,以表示糖果的最终分发情况(即 ans[i]
表示第 i
个小朋友分到的糖果数)。
输入:candies = 7, num_people = 4
输出:[1,2,3,1]
解题思路
暴力模拟可以直接过,数学方法公式推导较为繁琐,这里暂略。
参考代码
class Solution {
public:
vector<int> distributeCandies(int candies, int num_people) {
vector<int> res(num_people, 0);
int cur_give = 0;
int idx = 0;
while(candies > 0){
res[idx++ % num_people] += min(++cur_give, candies);
candies -= cur_give;
}
return res;
}
};