###A和B只能取一个数组两端的数字,判断谁先取的人能不能赢—博弈论
public class PredictTheWinner_486 {
public static boolean PredictTheWinner(int[] nums) {
if (nums==null||nums.length==0){
return false;
}
if (nums.length==1){
return true;
}
return f(nums,0,nums.length-1)>s(nums,0,nums.length-1);
}
private static int f(int[] nums, int i, int j) {
if (i==j){
return nums[i];//当只剩一个数字的时候只有f可以拿
}
//f获得的值肯定取当前的值和s取完剩下的值之后的最大值
return Math.max(nums[i]+s(nums,i+1,j),nums[j]+s(nums,i,j-1));
}
private static int s(int[] nums, int i, int j) {
if (i==j){
return 0;//只剩一个数字的时候s不能拿
}
//s获得的值肯定是f挑剩下的小的值
return Math.min(f(nums,i+1,j),f(nums,i,j-1));
}
}