题目来源于力扣(LeetCode)
一、题目
题目相关标签:数学
提示:
1 <= candies <= 10^9
1 <= num_people <= 1000
二、解题思路
-
情景模拟方式,当 candies 大于 0 时,一直循环遍历 num_people
-
定义变量 index 来记录每次需要分发的糖果数量
-
每次遍历判断 candies 是否能够分发本次遍历的元素
-
满足时,往 ans 数组的相应索引上加上相应的糖果数量,继续下一次的循环
-
不满足时,当剩余的糖果分给当前遍历的索引,结束循环
三、代码实现
public static int[] distributeCandies(int candies, int num_people) {
int[] ans = new int[num_people];
// 记录每次循环需要分出去的糖果数
int index = 1;
// 循环直到 candies 小于等于 0
while (candies > 0) {
// 每次循环前都判断 candies 是否大于 0
for (int i = 0; i < num_people && candies > 0; i++) {
// candies 糖果数不够分时
if (candies < index) {
// 剩余的糖果给当前遍历的索引
ans[i] += candies;
candies = 0;
break;
}
// candies 糖果数够分时
ans[i] += index;
candies -= index;
index += 1;
}
}
return ans;
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
int candies = 7, num_people = 4; // output:{1, 2, 3, 1}
// int candies = 10, num_people = 3; // output:{5, 2, 3}
int[] result = distributeCandies(candies, num_people);
System.out.println(Arrays.toString(result));
}