具体思路就是查找比查找值-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; } } }