题目链接
英文链接:https://leetcode.com/problems/distribute-candies-to-people/
中文链接:https://leetcode-cn.com/problems/distribute-candies-to-people/
题目详述
排排坐,分糖果。
我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。
给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。
然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。
重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果。注意,就算我们手中的剩下糖果数不够(不比前一次发出的糖果多),这些糖果也会全部发给当前的小朋友。
返回一个长度为 num_people、元素之和为 candies 的数组,以表示糖果的最终分发情况(即 ans[i] 表示第 i 个小朋友分到的糖果数)。
示例 1:
1 | 输入:candies = 7, num_people = 4 |
示例 2:
1 | 输入:candies = 10, num_people = 3 |
提示:
- 1 <= candies <= 10^9
- 1 <= num_people <= 1000
题目详解
按要求进行模拟分配即可,时间复杂度为 O(sqrt(n))
,其中 n
指的是 candies
的大小。
1 | public class LeetCode_01103 { |
- 根据 candies 算出一共可以完整的分发多少轮糖果 m。根据等差数列求和公式,完整的分发轮数应该在 (int)sqrt(candies) 或者 (int)sqrt(candies) - 1 中的某一个。
- 根据完整轮数分发糖果,最后把剩余的糖果分给最后一个被分发的人。
- 时间复杂度为
O(sqrt(n))
,其中n
指的是num_people
的大小。
1 | public class LeetCode_01103 { |