二分查找的若干问题

66 阅读1分钟

前提:

  • 整型数组 int[] array
  • 数据 int v

整数数组中寻找最后一个 <= v 的值的索引

array 中所有的值都大于 v 时,返回 -1

// 先确定 while 方法,再由该方法中可能出现的异常情况确定 l 和 r
int l = 0, r = array.length;
int mid;
// 找到第一个 > v 的索引,再减 1 就是最后一个 <= v 的值的索引
// 这种 while 方法只能找第 “1” 个
while (l < r) {
    mid = (l + r) / 2;
    if (array[mid] <= v) {
        l = mid + 1;
    } else {
        r = mid;
    }
}
return l - 1;