Skip to content

Latest commit

 

History

History
30 lines (26 loc) · 966 Bytes

File metadata and controls

30 lines (26 loc) · 966 Bytes

Predict the Winner

  • leetcode 486
  • dp[i][j]表示从num[i]num[j],第一个人比第二个人能多获得多少分
  • 基本状态是 dp[i][i] = nums[i]
  • 如果第一个人选num[i],那么dp[i][j] = nums[i] - dp[i + 1][j]
  • 如果第一个人选num[j],那么dp[i][j] = nums[j] - dp[i][j - 1]
  • dp[i][j] = Math.max(nums[i] - dp[i + 1][j], nums[j] - dp[i][j - 1]);
class Solution {
    public boolean PredictTheWinner(int[] nums) {
        if (nums.length == 0)
            return false;
        int[][] dp = new int[nums.length][nums.length];
        for (int i = 0; i < nums.length; i++)
            dp[i][i] = nums[i];

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