1. Description
Given an array of integers. Two players pick numbers from the array one by one. Each time a player can only pick from the left or the right of the array.
The player with the maximum score wins, Predict whether the player 1 can win.
2. Solution
Implement a function to calculate the maximum score that player 1 can get, if the 2*score is larger of equal to the total score, then he will win.
So how to implement the function.
There are two choices for the player 1 to pick now. If he pick the left number, the final score will be nums[l]+ min(score(l+1,r-1),score(l+2,r));
If he pick the right number, the final score will be nums[r]+ min(score(l+1,r-1),score(l,r-2)).
return the larger score.
3. Code
bool PredictTheWinner(vector<int>& nums) {
int n = nums.size();
int a = score(nums,0,n-1);
int sum = 0;
for(int i=0;i<n;i++)
sum+=nums[i];
if(2*a>=sum)
return true;
else
return false;
}
int score(vector<int>& nums,int l,int r){
if(l==r)
return nums[l];
if(l>r) return 0;
int a = nums[l]+min(score(nums,l+1,r-1),score(nums,l+2,r));
int b = nums[r]+min(score(nums,l+1,r-1),score(nums,l,r-2));
return max(a,b);
}