[
dp
game
math
]
Leetcode 0486 Predict the Winner
Problem statement
https://leetcode.com/problems/predict-the-winner/
Solution
The simplest way is to use full recursion with O(2^n) complexity. Smarter ways are to use dp, where dp[i][j] effective score, given numbers from i to j: maximum difference between first and second players. We can evaluate it as dp[i,j] = max(nums[i] - dp[i+1][j], nums[j] - dp[i][j-1]) and in the end we check if dp[0][n-1] is more or equal than 0.
Complexity
Time and space complexity is O(n^2). Space complexity can be reduced to O(n).
Code
class Solution:
def PredictTheWinner(self, nums):
@lru_cache(None)
def dp(i, j):
if i > j: return 0
return max(nums[i] - dp(i+1, j), nums[j] - dp(i, j-1))
return dp(0, len(nums) - 1) >= 0