486.预测赢家
给定一个表示分数的非负整数数组。 玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,…… 。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分数总和最多的玩家获胜。
给定一个表示分数的数组,预测玩家1是否会成为赢家。你可以假设每个玩家的玩法都会使他的分数最大化。
class Solution {
public boolean PredictTheWinner(int[] nums) {
return total(nums,0,nums.length-1,1)>=0;
}
/* 递归
*1.每次只能拿数组的第一个/最后一个
*2.int一个标记turn 1表示为先手,-1为后手 即先手拿分数记录下的为正后手为负
*3.求和,return>=0 先手即获胜
*/
public int total(int[] nums,int start,int end,int turn){
if(start==end)
return nums[start];
int score1 = nums[start]*turn+total(nums,start+1,end,-turn);
int score2 = nums[end]*turn+total(nums,start,end-1,-turn);
return Math.max(score1*turn,score2*turn)*turn;
}
}

浙公网安备 33010602011771号