二分查找的优雅写法
根据返回值的要求不同,二分查找有以下几种(假定我们在一个整数数组中查找某个value)
0 二分查找的分类
有下面几种形式的要求:
- 如果存在,返回true,否则返回false。
- 如果存在,返回第一次出现的索引值,否则返回-1。
- 如果存在,返回第一次出现的索引值,否则返回-(1 + 可插入的位置)。可插入的位置指的是第一个大于等于查找值位置的索引。
- 如果存在,返回第一次出现的索引和最后一次出现的索引,否则返回
[-1, -1]。
所有的要求都可以用下面将要讲到的lower和upper函数解决:
1 求第一个大于等于查找值的位置
我们在前开后闭区间[first, last)中递归地查找,返回第一个大于等于value的位置;如果所有数字都小于value,那么返回last。
这个返回值实际上也是value应该插入的位置。
int lower(int[] array, int value) {
int first = 0, last = array.length;
while (first < last) {
// 当[fisrt, last)非空时
int mid = first +

本文介绍了二分查找在排序数组中的应用,详细阐述了如何通过二分查找求解不同问题,如找到第一个大于等于查找值的位置、第一个大于查找值的位置、最后一个小于等于查找值的位置,以及确定一个值的出现范围和次数。通过提供的示例,展示了二分查找在实际操作中的优雅写法。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



