假设我们有一个称为糖果的数字列表,两个人竞相收集最多的糖果。在这里,比赛是基于回合的,第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