LeetCode 1103[分糖果II]
题目
链接
详情
实例
提示
题解
思路
定义容器vecRet,使每个元素值均为0,即代表每个孩子手上开始都是0个糖果
定义iCount为默认的糖果数量,初始值为1
逐个遍历容器,也就是开始给每个孩子分糖果 获取容器当前元素值,即每个孩子当前的糖果数量iAt
如果糖果数量candies不小于每个孩子默认要分发的糖果数量iCount,则该孩子分到的糖果数量为默认数量,即iCount
此时孩子手上的糖果数量为iAt + iCount
剩余糖果数量为:candies - iCount
下一个孩子需要分发的默认糖果数量为:iCount++
继续遍历,如果遍历到最后一个孩子时,手上还有剩余糖果,则又开始从第一个孩子开始遍历
直到糖果数量candies小于该孩子默认要分发的糖果数量iCount,则把剩余的糖果全部分发给孩子,即分发后孩子的糖果数量为:iAt + candies,此时,剩余糖果数量为0,则退出循环
代码
class Solution {
public:
vector<int> distributeCandies(int candies, int num_people) {
vector<int> vecRet;//定义容器
for (int i = 0; i < num_people; i++)//初始化容器初值为0
vecRet.push_back(0);
int iCount = 1;//默认分发糖果数量
for (int i = 0; i < num_people; i++)//遍历开始分糖果
{
int iAt = vecRet.at(i);//取当前元素的糖果数量
if (candies < iCount)//不够分
{
iAt += candies;//全部分掉
vecRet.at(i) = iAt;
break;//结束
}
iAt += iCount;//分发默认数量的糖果
vecRet.at(i) = iAt;
if (num_people - 1 == i)//最后一个元素,赋值-1,然后循环+1变成0,即变成初始元素
i = -1;
candies -= iCount;//剩余糖果数量=当前糖果数量-默认分发的糖果数量
iCount++;//默认分发糖果数量+1
}
return vecRet;
}
};
本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/18545459