自己没有做出来,看了官方的解答,我用dp[i][j]表示,作为先手,数组的起止坐标为i和j,自己获得的积分和对手获取积分差值的最大值。
有状态转移方程:dp[i][j] = max{nums[i]-dp[i+1][j], nums[j]-dp[i][j-1]},用动态规划的方式来解决这道题目。
class Solution {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.PredictTheWinner(new int[]{
1, 5, 2}));
}
public boolean PredictTheWinner(int[] nums) {
if (nums == null || nums.length == 0) return true;
int[] arr = new int[nums.length];
for (int i = 1; i <= nums.length; i++) {
arr[arr.length-i] = nums[nums.length-i];
for (int j = arr.length-i+1; j < nums.length ; j++) {
arr[j] = Math.max(nums[nums.length-i]-arr[j],nums[j]-arr[j-1]);
}
}
return arr[nums.length-1]>=0;
}
}