首先判断有没有解,如果目标值小于数组最后一个数,那么一定有解。
    改变二分查找,如果mid大于等于于目标值,可能我们的这个mid是最优的可能不是,左边还有,那么我们选择的范围就是【start,mid】,最后得到结果。

import java.util.*;


public class Solution {
    /**
     * 二分查找
     * @param n int整型 数组长度
     * @param v int整型 查找值
     * @param a int整型一维数组 有序数组
     * @return int整型
     */
    public int upper_bound_ (int n, int v, int[] a) {
        // write code here
        if(v>a[n-1]){
            return n+1;
        }
        int start = 0;
        int end = n-1;
        int mid=start+(end-start)/2;
        while(start < end){
            if(a[mid]>=v){
                end = mid;
            }else{
                start = mid+1;
            }
            mid = start+(end-start)/2;
        }
        return mid+1;
    }
}