解锁“二分魔法”:让算法题轻松找到答案的秘密(2)
前言:
在算法的世界里,二分法被誉为“魔法”般的存在。这种简单而强大的工具,能够在庞大的解空间中快速找到答案,尤其在复杂的算法题中,往往能化繁为简,带来突破性的思路。然而,掌握二分法不仅仅是了解“左右边界”这么简单,它的精髓在于将问题抽象为“单调性”,进而进行有效的搜索。本文将继续带你解锁二分法的进阶技巧,从实际问题出发,剖析隐藏在算法题背后的二分“魔法”,让你在解题时游刃有余,轻松找到答案!
小编在前文讲述了二分算法的第一个题目,同样也是二分算法的第一个模版,今天小编紧接着上文所说,开始讲述二分算法余下的两个模版,下面开启今日的做题之旅~
1.在排序数组中查找元素的第一个和最后一个的位置
1.1.题目来源
本题和之前的题目一样,源自于力扣,下面小编给出它的链接:34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)
1.2.题目解析
本题是给了我们一个非递减排列的数组以及一个目标值,想让我们在这个数组里面找到一个区间,这个区间里面的数都是目标值所在的数,我们仅需返回它刚开始出现的位置以及结束的位置即可,如果在这个数组里面没有这个数,那么就返回-1和-1即可,为了让各位更好的理解,下面小编就以示例一为例,示例一是想让我们在数组中找到连续8的区间,此时8开始位置是3,所以左边界是3,结束位置是4,所以右边界就是4,此时我们就找到了8所在的区间,就是[3,4],本题就是想要我们实现找到一个数的左边界和右边界,下面小编进入本题目的思路讲解。
1.3.题目思路讲解
通过小编前面讲述的题目解析后,相信部分读者朋友已经知道了本题目的大致内容,此时我们需要分两步来进行本题目的完成,第一步是寻找左端点,第二步是寻找右端点,在这两步中,我们分别可以知晓其中的“二分性”,下面小编先通过左端点的寻找来告诉各位如何寻找左端点。
1.左端点
对于左端点的寻找,我们往往可以分为两个区间进行查找,如上图所示,第一个区间是小于target的部分,第二个区间是大于等于target的部分,这么分的原因是因为此时我们要寻找左端点,左端点是第一个出现的位置,所以我们应该从右边找第一个出现的位置,这样的话寻找起来是比较容易的,此时对于本题目,我们同样也可以设置好两个“指针”,一个在开头,一个在结尾,还需要一个中间值mid,此时的mid求解起来其实是有一个小坑的,对于mid的求法,我们知道有两种方法可以求解mid,如下所示:
1. m i d = = [ l e f t + ( r i g h