Python中检查第一个人能否拿到比其他人更多糖果的程序

Python中检查第一个人能否拿到比其他人更多糖果的程序

假设我们有一个名为candies的数字列表,两个人正在比赛谁能收集到最多的糖果。这里比赛是轮流进行的,第一个人首先开始,在每一轮中他可以从前面或后面拿糖果。我们必须检查第一个人是否可以收集到比其他人更多的糖果。

因此,如果输入如candies = [1, 4, 3, 8],则输出将为True,因为第一个人可以在第一轮中取8颗糖果,而无论第二个人是否挑选1或3,第一个人都可以通过拿任何剩余的糖果来赢得比赛。

要解决这个问题,我们需要遵循以下步骤−

  • N := candies的大小

  • 定义一个difference ()函数。这将接受left,right

  • 如果left与right相同,则

    • 返回candies [left]
  • 返回(candies [left] – difference(left + 1,right))和(candies [right] – difference(left,right-1))中的最大值

  • 从主方法中执行以下操作−

  • 当difference(0,N-1)> 0时返回True,否则返回False

以下是实现,以便更好地理解−

示例

class Solution:
   def solve(self, candies):
      N = len(candies)
      def difference(left, right):
         nonlocal candies
         if left == right:
            return candies[left]
         return max(candies[left] - difference(left + 1, right), candies[right] - difference(left, right - 1))
      return difference(0, N - 1) > 0

ob = Solution()
candies = [1, 4, 3, 8]
print(ob.solve(candies))

输入

[1, 4, 3, 8]

输出

True

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程