LeetCode 1103[分糖果II]

题目

链接

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;
    }
};
posted @ 2024-11-14 10:24  EricsT  阅读(8)  评论(0编辑  收藏  举报