题目:
思路:
本题一开始的思路就是按照流程一步步分下去,算是暴力方法,在官方题解中有利用等差数列进行计算的
这里只记录一下自己的暴力解题方式
只考虑每次分配的糖果数,分配的糖果数为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
时间: 2024-11-10 11:07:19