486. 预测赢家
难度:中等
题目描述
解题思路
1、记忆化递归
每次做出一个选择之后,比如
1 4 2 19
选了1,那对方可以选19,我只能选4,对方选2,我就输了
选19,那对方选2,我选4,就赢了
大概的递归代码是:
//做出这一轮选择之后,还要让下一轮对手拿到的比较小
//这一轮选左边的
int num1 = nums[low] + Math.min(predictHelper(nums,low+1,high-1,memo), predictHelper(nums,low+2,high,memo));
//这一轮选右边的
int num2 = nums[high] + Math.min(predictHelper(nums,low+1,high-1,memo), predictHelper(nums,low,high-2,memo));
return Math.max(num1, num2);
可以看出有很多重复的递归过程,所以可以加入记忆化
/*
* 486. 预测赢家
* 2020/9/1
*/
public boolean PredictTheWinner(int[] nums