Arrays 确定第一个玩家是否能赢得一场比赛

Arrays 确定第一个玩家是否能赢得一场比赛,arrays,algorithm,data-structures,computer-science,Arrays,Algorithm,Data Structures,Computer Science,考虑下面的游戏。有一个正数数组。每个玩家依次移除一个片段(元素的连续序列),使其总和为偶数。输的玩家是不能移动的玩家。 对于[4,5,3,7,2]示例,获胜策略(对于第一个玩家)是删除[5,3]片段。 您需要确定第一个玩家是否有获胜的移动(如果是,则返回slice\u start和slice\u end索引) 时间/空间复杂性:O(n) 我自然想到的一件事是从左到右计算累计和,反之亦然。在[4,5,3,7,2]示例中,我们得到: acc\u l=[4,9,12,19,21]和acc\u r=[2

考虑下面的游戏。有一个正数数组。每个玩家依次移除一个片段(元素的连续序列),使其总和为偶数。输的玩家是不能移动的玩家。 对于
[4,5,3,7,2]
示例,获胜策略(对于第一个玩家)是删除
[5,3]
片段。 您需要确定第一个玩家是否有获胜的移动(如果是,则返回
slice\u start
slice\u end
索引)

时间/空间复杂性:
O(n)

我自然想到的一件事是从左到右计算累计和,反之亦然。在
[4,5,3,7,2]
示例中,我们得到:
acc\u l=[4,9,12,19,21]
acc\u r=[21,17,12,9,2]

所以我几乎可以肯定这两个辅助阵列会派上用场,但我无法完全理解


我很高兴能得到帮助

计算整个数组的和。检查它是偶数还是奇数。还要计算数组中的偶数和奇数(一次完成)。这将帮助您找到答案。

除了累计和数组之外,还应该使用此信息吗?在我看来,仅此信息是不够的。这是不够的:
0 1 0
对于第一个玩家来说是一个损失,但是
1 0 0
对于第一个玩家来说是一个胜利。@user3080953-好分。所以我想这就是解决方案:求和为偶数=你去掉所有数字,然后赢。Sum is odd=,检查奇数是在数组的开头还是结尾。如果是,请删除此数字旁边的所有数字。如果不=没有获胜的动作。@libik同意偶数和,但
0 1 0
是第一个玩家的胜利,但不是以奇数开始或结束。否,这与问题中的情况一致。获胜的一步是采取其中两个步骤:
0110
=>
0110
,这是一个失败的位置。您可以删除所有数字吗?是的,您可以@利比克