```
class Solution(object):
def PredictTheWinner(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
self.nums = nums
self.memo = {}
return self.isWinner(0,len(nums)-1, 1)>=0
def isWinner(self,i,j,sign):
if (i,j) in self.memo:
return self.memo[(i,j)]
elif i==j:
return sign*self.nums[i]
else:
l = sign*self.nums[i] + self.isWinner(i+1,j,-1*sign)
r = sign*self.nums[j] + self.isWinner(i,j-1,-1*sign)
val = sign*max(sign*l,sign*r)
self.memo[(i,j)]=val
return val
```