1103.分糖果II
阿新 • • 發佈:2020-07-19
原題連結
題解
直接手動模擬過去,時間複雜度為O(n)
程式碼如下
class Solution { public: vector<int> distributeCandies(int candies, int num_people) { vector<int> res(num_people, 0); int idx = 0, ans = 1; while(candies > 0){ if(ans <= candies) res[idx ++] += ans, candies -= ans, ans ++; else res[idx ++] += candies, candies = 0; if(idx == num_people) idx = 0; } return res; } };
其實我們可以發現,每次應該分的的糖果數減一mod人數(假設人的編號從0開始),就是我們的人的編號,即陣列下標
程式碼如下
class Solution { public: vector<int> distributeCandies(int candies, int num_people) { vector<int> res(num_people, 0); int ans = 0; while(candies > 0){ res[ans % num_people] += min(ans + 1, candies);//要注意C++中先進行運算的是右邊 candies -= ++ ans; } return res; } };