LeetCode 1103. 分糖果 II
题目描述
思路分析
解法一:模拟发放(推荐)
核心思路:
- 每次给第
i个人give颗糖,give逐步递增。- 若剩余糖不足,则给剩余全部并结束。
- 轮到的人通过
i % num_people索引。
复杂度分析:
- 时间复杂度:O(t),其中 t 为发放次数,约为 O(√candies)。
- 空间复杂度:O(1)(输出数组除外)。
class Solution {
public int[] distributeCandies(int candies, int num_people) {
int[] res = new int[num_people];
int give = 1;
int i = 0;
while (candies > 0) {
int idx = i % num_people;
int cur = Math.min(candies, give);
res[idx] += cur;
candies -= cur;
give++;
i++;
}
return res;
}
}
func distributeCandies(candies int, numPeople int) []int {
res := make([]int, numPeople)
give := 1
i := 0
for candies > 0 {
idx := i % numPeople
cur := give
if candies < cur {
cur = candies
}
res[idx] += cur
candies -= cur
give++
i++
}
return res
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 412. Fizz Buzz | 简单 | 模拟 |
| 989. 数组形式的整数加法 | 简单 | 模拟 |
| 66. 加一 | 简单 | 模拟 |
| 1103. 分糖果 II | 简单 | 模拟 |
| 806. 写字符串需要的行数 | 简单 | 模拟 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!