假设我们要通过以下方式将一定数量的糖果分配给n人一行-
然后,我们给第一个人1个糖果,给第二个人2个糖果,依此类推,直到最后一个人给n个糖果。
之后,我们再次返回到行的开头,将n + 1个糖果分配给第一个人,将n + 2个糖果分配给第二个人,依此类推,直到将2 * n个糖果分配给最后一个人。
我们将重复此过程,直到糖果用完为止。最后的人会得到我们所有剩余的糖果(不一定比以前的礼物多一个)。
我们必须返回一个代表糖果最终分布的数组。因此,假设糖果为7,并且n = 3,则输出为[2,2,3]。因此,第一个人第一人将得到1。数组为[1、0、0],第二个人为2,然后数组为[1、2、0],第三个人为3,然后数组为[1, 2,3],最后第一个又得到1,所以数组是[2,2,3]
为了解决这个问题,我们将遵循以下步骤-
res是n个元素的数组,并用0填充
索引:= 0
而糖果> 0
res [index mod n]:= res [index mod n] +糖果和索引的最小值+ 1
糖果:=糖果– 1
索引:=索引+ 1
返回资源
让我们看下面的实现以更好地理解-
class Solution(object): def distributeCandies(self, candies, num_people): res = [0 for i in range(num_people)] index = 0 while candies>0: res[index%num_people] += min(candies,index+1) candies-=(index+1) index+=1 return res ob1 = Solution() print(ob1.distributeCandies(8, 3))
8 3
输出结果
[3, 2, 3]