[LeetCode] 1103. Distribute Candies to People 分糖果

题目:


 思路:

本题一开始的思路就是按照流程一步步分下去,算是暴力方法,在官方题解中有利用等差数列进行计算的

这里只记录一下自己的暴力解题方式

只考虑每次分配的糖果数,分配的糖果数为1,2,3,4,5,..., 依次加1

再考虑到分配的轮数,可以利用 i % num_people 来求得第i次应该分配到第几个人

最后要注意的是,如果当前糖果数小于本应该分配的糖果数,则将当前糖果全部给予,也就是要判断剩余糖果数 candies 与本该分配糖果数 i+1 的大小,谁小分配谁

代码:

class Solution {
public:
    vector<int> distributeCandies(int candies, int num_people) {
        // vector<int> res(num_people, 0);
        // int i=1;
        // for(int k=0; candies>=i+k*num_people; k++){
        //     while(i <= num_people){
        //         if(candies<i+k*num_people){
        //             res[i-1] += candies;
        //             candies = 0;
        //             break;
        //         }
        //         res[i-1] += i+k*num_people;
        //         candies -= i+k*num_people;
        //         i++;
        //     }
        //     i=1;
        // }
        // if(candies) res[0] += candies;
        // return res;
        vector<int> ans(num_people);    // 初始元素为0
        int i=0;
        while(candies!=0){
            ans[i % num_people] += min(candies, i+1);
            candies -= min(candies, i+1);
            i++;
        }
        return ans;
    }
};

被注释的代码是自己的想法,虽然复杂度相同,看到题解才发现自己小题大做,没有理解透题目

原文地址:https://www.cnblogs.com/ech2o/p/12419281.html