1103. 分糖果 II『简单』

题目来源于力扣(LeetCode

一、题目

1103. 分糖果 II

题目相关标签:数学

提示:

  • 1 <= candies <= 10^9
  • 1 <= num_people <= 1000

二、解题思路

  1. 情景模拟方式,当 candies 大于 0 时,一直循环遍历 num_people

  2. 定义变量 index 来记录每次需要分发的糖果数量

  3. 每次遍历判断 candies 是否能够分发本次遍历的元素

  4. 满足时,往 ans 数组的相应索引上加上相应的糖果数量,继续下一次的循环

  5. 不满足时,当剩余的糖果分给当前遍历的索引,结束循环

三、代码实现

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));
}
posted @ 2020-06-08 21:38  知音12138  阅读(205)  评论(0编辑  收藏  举报