排排坐遏片,分糖果绰寞。
我們買了一些糖果 candies,打算把它們分給排好隊的 n = num_people 個小朋友泉手。
給第一個小朋友 1 顆糖果辆脸,第二個小朋友 2 顆,依此類推螃诅,直到給最后一個小朋友 n 顆糖果。
然后状囱,我們再回到隊伍的起點术裸,給第一個小朋友 n + 1 顆糖果,第二個小朋友 n + 2 顆亭枷,依此類推袭艺,直到給最后一個小朋友 2 * n 顆糖果。
重復上述過程(每次都比上一次多給出一顆糖果叨粘,當?shù)竭_隊伍終點后再次從隊伍起點開始)猾编,直到我們分完所有的糖果。注意升敲,就算我們手中的剩下糖果數(shù)不夠(不比前一次發(fā)出的糖果多)答倡,這些糖果也會全部發(fā)給當前的小朋友。
返回一個長度為 num_people驴党、元素之和為 candies 的數(shù)組瘪撇,以表示糖果的最終分發(fā)情況(即 ans[i] 表示第 i 個小朋友分到的糖果數(shù))。
示例 1:
輸入:candies = 7, num_people = 4
輸出:[1,2,3,1]
解釋:
第一次港庄,ans[0] += 1倔既,數(shù)組變?yōu)?[1,0,0,0]。
第二次鹏氧,ans[1] += 2渤涌,數(shù)組變?yōu)?[1,2,0,0]。
第三次把还,ans[2] += 3实蓬,數(shù)組變?yōu)?[1,2,3,0]茸俭。
第四次,ans[3] += 1(因為此時只剩下 1 顆糖果)瞳秽,最終數(shù)組變?yōu)?[1,2,3,1]瓣履。
示例 2:
輸入:candies = 10, num_people = 3
輸出:[5,2,3]
解釋:
第一次,ans[0] += 1练俐,數(shù)組變?yōu)?[1,0,0]袖迎。
第二次,ans[1] += 2腺晾,數(shù)組變?yōu)?[1,2,0]燕锥。
第三次,ans[2] += 3悯蝉,數(shù)組變?yōu)?[1,2,3]归形。
第四次,ans[0] += 4鼻由,最終數(shù)組變?yōu)?[5,2,3]暇榴。
提示:
1 <= candies <= 10^9
1 <= num_people <= 1000
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/distribute-candies-to-people
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)蕉世,非商業(yè)轉(zhuǎn)載請注明出處蔼紧。
class Solution {
public int[] distributeCandies(int candies, int num_people) {
int[]result = new int[num_people];
int sum = 0;
int n = 0;
//找著剛好夠分的部分
while(sum <= candies){
n++;
sum = ( 1 + n ) * n / 2;
}
//上面的循環(huán)多做了一次
sum -= n;
n--;
int index = 0;
for(int i = 1; i <= n; i++){
index = (i - 1) % num_people;
result[index] += i;
}
//分完剩下的給最后一個人
if(candies - sum > 0){
index++;
index = index % num_people;
result[index] += candies - sum;
}
return result;
}
}