中等
给你一个整数数组 nums。
玩家 1 和玩家 2 基于这个数组设计了一个游戏。
玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0 。
每一回合,玩家从数组的 任意一端 取一个数字(即,nums[0] 或 nums[nums.length - 1]),取到的数字将会从数组中 移除(数组长度减 1 )。玩家选中的数字将会加到他的得分上。当数组中没有剩余数字可取时,游戏结束。
如果玩家 1 能成为赢家,返回 true 。
注意,如果两个玩家得分相等,同样认为玩家 1 是游戏的赢家。你可以假设每个玩家的玩法都会使他的分数最大化。
示例 1:
输入:nums = [1,5,2]
输出:false
解释:
- 玩家 1 必须先取 1 或 2,两种选择都会导致相同的结果。
- 如果玩家 1 取 1,数组变为
[5, 2]。玩家 2 取 5,剩下 2 给玩家 1。 - 如果玩家 1 取 2,数组变为
[1, 5]。玩家 2 取 5,剩下 1 给玩家 1。 - 无论哪种情况,玩家 1 最终得到
1 + 2 = 3,玩家 2 得到5。玩家 1 永远无法获胜,所以返回false。
示例 2:
输入:nums = [1,5,233,7]
输出:true
解释:
- 玩家 1 先取 1,剩下
[5,233,7]。然后玩家 2 必须在 5 和 7 之间选择,无论玩家 2 选择哪个数字,玩家 1 在下一次回合都可以取 233。 - 玩家 1 的得分(234)高于玩家 2(12),所以返回
true。
提示:
1 <= nums.length <= 200 <= nums[i] <= 107