在面对一堆数据中查找某一数据,我们可以用逐一枚举的方式来进行搜索.但是这样时间复杂度会很大,会浪费很多内存.因此,在这周,我学习到了二分查找和二分答案来进行搜索.这样就可以降低时间复杂度了.
首先是二分查找,通常情况下,二分查找只需要控制好边界条件就可以了.
思路通常为设置一个起点和一个终点,取这个区间的中间值与目标值进行比较,如果中间值大于目标值,那就舍弃右区间,如果中间值小于目标值.那就舍弃左区间.如此循环就能找到目标值了.
模板分为以下两类.
模板一
模板二
这就是在二分查找中两个基本的模板了.
第一个模板是从左开始寻找目标.第二个模板是从右开始寻找目标.
当然,二分查找也能寻用在实数范围内进行,实数范围就不用考虑那么多边界问题了
模板三
浮点二分相对于上面的两种模板,不用考虑边界问题,因为浮点数不会取整,所以不用考虑.
在我们做题的时候,如果题目明确要求找最小值的话,我们就用第一个模板,如果是寻找最大值,我们就用第二个模板.
接下来就是二分答案了,那么二分答案和二分查找有什么区别呢.
二分查找:在一个有序区间上进行左右划分的查找.
二分答案:答案有一个区间,在这个区间内进行二分,直到找到最优解.
典型的二分答案特征就是求什么的最大值的最小,求什么最小值的最大.
1.求什么最大值的最小,即在我们使用二分答案的时候,当二分最大值的时候,我们尽量让答案往前靠既让r=mid,这里我们用到的模板就是模板一.
2.求什么最小值的最大,即在我们使用二分答案的时候,当二分最小值的时候,我们尽量让答案往后靠,既让l=mid,这里我们用到的模板就是模板二.
以上,就是我对于二分查找和二分答案的学习.