• 搜索插入位置----二分查找


    首先先说一点:二分查找法不仅仅可以用在有序数组里元素的查找上。如果是一个问题,待查找的数是整数,且知道范围,大概就可以通过逐步排查,缩小问题的规模的方式找到,这种算法也是二分查找算法。

    我们平常写程序,定位问题其实通常也用的是这个思路。在适当的地方做一些代码输出,逐步缩小范围,最后找到了有 bug 的那一行或几行代码。

    初学写二分查找的问题是:跳步厉害,写下 left = mid 或者 right = mid - 1 等代码的时候,一定要搞清楚是什么意思,必要的时候写上注释,帮助自己思考和以后复查代码。

    本题解最重要的一句话:

    把待搜索的目标值留在最后判断,在循环体内不断地把不符合题目要求的子区间排除掉,在退出循环以后,因为只剩下 1 个数没有看到,它要么是目标元素,要么不是目标元素,单独判断即可。

    以前有个段子,我记得是奇志和大兵说的:说有个人去看病,他其实只是小感冒,医生让他把除了感冒的病症都检查一遍,什么心肝脾胃肾都让你做检查。这些病你都没有,那不就是得感冒了吗。虽然是个段子,但是这个思想是很朴素的。用在解二分法的问题上,会使得编码更加容易。

    用这种思路写二分不容易出错,需要考虑的细节最少。熟悉之后,可以用于写所有的二分问题。而且这种思路也非常符合「二分」的名字,就是把「待搜索区间」分为「有目标元素的区间」和「不包含目标元素的区间」,排除掉「不包含目标元素的区间」的区间,剩下就是「有目标元素的区间」。

    算法问题建议更多地理解思想,思考为什么这样写,而不建议背代码,背模板。即使要用代码和模板,例如并查集、线段树这种,也应该先把它们保存到自己的 github 代码仓库里,要用的时候去复制粘贴。

     

     

     

     

    作者:liweiwei1419
    链接:https://leetcode-cn.com/problems/search-insert-position/solution/te-bie-hao-yong-de-er-fen-cha-fa-fa-mo-ban-python-/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    Linux 磁盘管理
    Linux 特殊权限及if语句
    Linux find命令
    MySQL索引知识介绍
    MySQL库表设计小技巧
    教你用SQL实现统计排名
    Truncate用法详解
    utf8字符集下的比较规则
    关于Aborted connection告警日志的分析
    MySQL DDL详情揭露
  • 原文地址:https://www.cnblogs.com/sweet-li/p/13160749.html
Copyright © 2020-2023  润新知