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