具体思路就是查找比查找值-1的数字的右边界,也就是查找值的左边界。
国际惯例,定义left节点和right节点,最后输出left节点就可以了,具体思路看代码哦,因为牛客题目清奇要求在没有匹配数字的情况下输出数组长度+1,所以写了一个看起来非常low的if函数。。。欢迎提问哦!
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) {
v = v - 1;
int left = 0;
int right = n-1;
while (left<=right){
int mid = (left+right)/2;
if(v>=a[mid]){
left = mid + 1;
}else {
right = mid -1;
}
}
if (left<=n-1){
return left+1;
}else {
return n+1;
}
}
}
京公网安备 11010502036488号