程序来检查第一个玩家在Python中是否可以摄取比其他糖果更多的糖果

假设我们有一个称为糖果的数字列表,两个人竞相收集最多的糖果。在这里,比赛是基于回合的,第1人首先开始,并且在每个回合中,他都可以从正面或背面拾取糖果。我们必须检查第1人是否可以收集比其他更多的糖果。

因此,如果输入像candys = [1、4、3、8],则输出将为True,因为人1在第一轮可以拿走8个糖果,而无论第二人是选择1还是3,人1可以拿剩下的糖来赢。

为了解决这个问题,我们将遵循以下步骤-

  • N:=糖果的大小

  • 定义一个功能difference()。这将采取左,右

  • 如果左与右相同,则

    • 返回糖果[左]

  • 返回(candy [left]-差异(left + 1,right))和(candies [right]-差异(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

猜你喜欢