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