LeetCode 1103. 分糖果 II

题目描述

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. 写字符串需要的行数 简单 模拟
本文作者:
本文链接: https://hgnulb.github.io/blog/2023/60049703
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!