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]

更新于: 2020年4月29日

1K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告