A和B的取数问题

###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));
  }
}
0%