Python 中如何分配糖果
假设我们想以以下方式将一些糖果分发给一行 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
- index := 0
- 当 candies > 0 时
- res[index mod n] := res[index mod n] + candies 和 index + 1 的最小值
- candies := candies – 1
- index := index + 1
- 返回 res
示例
让我们看看下面的实现以更好地理解:
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]
广告