数据结构与算法笔记day13:二分查找(下)

        上一节我们讲了二分查找的最基本的写法,就是在一个没有重复元素的数组中查找,今天来看四个常见的二分查找变形问题:

    1查找第一个值等于给定值的元素

        比如下面这个有序数组中,有3个重复的8,我们希望找到第一个等于8的数据,也就是下标是5的元素。

        代码如下:

        运行结果:

        代码思路为,当mid==c时,有两种情况下这个mid就是我们要找的第一个值等于给定值的元素,第一种是mid==0,它已经是第一个元素了,那肯定也是第一个值等于给定值的元素;第二种是a[mid-1]!=c,即mid的前一个元素的值不等于要找的值,那么mid肯定也是第一个值等于给定值的元素。

    2查找最后一个值等于给定值的元素

        和查找第一个值等于给定的元素的方法很像,我们稍作修改即可,代码如下:

        运行结果:

    3查找第一个大于等于给定值的元素 

        代码如下:

        运行结果:

    4查找最后一个小于等于给定值的元素

        代码如下:

        运行结果:

        戳这里下载源代码。

        最近睡不好觉得好累呀,敲代码的时候眼睛都要闭上了,效率也很差,往常经常一次就可以编译通过或者只错一两处,这次第一段代码竟然错了十几处,呜呜┭┮﹏┭┮

你可能感兴趣的:(数据结构与算法笔记day13:二分查找(下))