方法一 个人方法:
有多少人就创建多大的数组并把数组的所有元素初始化为0,只要还有糖果,就循环给数组从头到尾添加糖果,每次分的糖果数递增1,最后可能刚好分完也可能不够,不够就还剩多少给多少。
var distributeCandies = function(candies, num_people) {
var res = new Array(num_people).fill(0)
var i=0
while(candies>0){
if(candies-i-1>=0){
res[i%num_people]+=i+1
candies-=i+1
}else{
res[i%num_people]+=candies
candies=0
}
i++
}
return res
};
消耗时间和内存情况:
方法二 数学公式
详细公式推导过程:
作者:力扣官方题解
链接:leetcode 1103 题解
var distributeCandies = function(candies, num_people) {
let n = num_people
let p = Math.floor((2 * candies + 0.25)**0.5 - 0.5)
let r = Math.floor(candies - (p + 1) * p * 0.5)
let res = new Array(n).fill(0)
let rows = Math.floor(p/n)
let cols = p%n
for (let i = 0; i < n; i++) {
res[i] = (i+1)*rows + Math.floor(rows * (rows - 1) * 0.5) * n
if(i<cols) res[i] += i+1+rows*n
}
res[cols] += r
return res
};
消耗时间和内存情况: