1. check()函数找出使 在比较过程中大于等于零的数字
2. check_to(int pos)找出数组从pos往后数最大的值。如果数组最大的值都小于等于当前数,那么方案肯定可行**
import java.util.Scanner;
public class Main {
//机器人跳跃问题 二分
static int[] arr;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
arr = new int[n];
for(int i=0;i<n;i++){
arr[i] = in.nextInt();
}
binarySearch();
}
static void binarySearch() {
int l = 1 ;
int r = 100000;
while(l < r){
//check函数 找出过程中大于等于零的情况
int mid = l + r >> 1;
if(check(mid)) r = mid;
else l = mid +1;
}
System.out.println(l);
}
static boolean check(long start){
if(start>=check_to(0)) return true;
for(int i=0;i<arr.length;i++){
start = start + start - arr[i];
if(start>=check_to(i)) return true;
if(start<0) return false;
}
return true;
}
static int check_to(int pos){
int max = Integer.MIN_VALUE;
for(int k = pos ;k<arr.length;k++){
if(arr[k]>=max) max = arr[k];
}
return max;
}
}