首先判断有没有解,如果目标值小于数组最后一个数,那么一定有解。
改变二分查找,如果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; } }