上一节我们讲了二分查找的最基本的写法,就是在一个没有重复元素的数组中查找,今天来看四个常见的二分查找变形问题:
1查找第一个值等于给定值的元素
比如下面这个有序数组中,有3个重复的8,我们希望找到第一个等于8的数据,也就是下标是5的元素。
代码如下:
运行结果:
代码思路为,当mid==c时,有两种情况下这个mid就是我们要找的第一个值等于给定值的元素,第一种是mid==0,它已经是第一个元素了,那肯定也是第一个值等于给定值的元素;第二种是a[mid-1]!=c,即mid的前一个元素的值不等于要找的值,那么mid肯定也是第一个值等于给定值的元素。
2查找最后一个值等于给定值的元素
和查找第一个值等于给定的元素的方法很像,我们稍作修改即可,代码如下:
运行结果:
3查找第一个大于等于给定值的元素
代码如下:
运行结果:
4查找最后一个小于等于给定值的元素
代码如下:
运行结果:
戳这里下载源代码。
最近睡不好觉得好累呀,敲代码的时候眼睛都要闭上了,效率也很差,往常经常一次就可以编译通过或者只错一两处,这次第一段代码竟然错了十几处,呜呜┭┮﹏┭┮