LeetCode 1103[分糖果II]

EricsT發表於2024-11-14

題目

連結

LeetCode 1103[分糖果II]

詳情

LeetCode 1103[分糖果II]

例項

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;
    }
};

相關文章