486. Predict the Winner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public boolean PredictTheWinner(int[] nums) {
// 定义 dp[i][j] 为当前玩家分数最大化时的净得分
// dp[i][j] = Math.max(nums[i] - dp[i + 1][j], nums[j] - dp[i][j - 1])
int[][] dp = new int[nums.length][nums.length];

for (int i = 0; i < nums.length; i++) {
dp[i][i] = nums[i];
}

for (int i = nums.length - 2; i >= 0; i--) {
for (int j = i + 1; j < nums.length; j++) {
dp[i][j] = Math.max(nums[i] - dp[i + 1][j], nums[j] - dp[i][j - 1]);
}
}

return dp[0][nums.length - 1] >= 0;
}
}

References

486. Predict the Winner