LC吐血整理之Binary_Search篇


所有题解方法请移步 github-Leecode_summary

278 第一个错误的版本

做题吧 ☟

  • 找思路 (二分法)
  • 实现代码 (迭代or递归) (将n转化为list or 记录left right索引)

今日份 small Tips :
  mid = left+(right-left)/2 (虽然py不需要考虑,但在C++,java中可以防止数据溢出)
扩展版本:
  寻找某个值时,返回其索引   如果要求不能用内置函数的话,就直接套用这个题目,进行二分法搜索

35. 搜索插入位置

得益于278题,思路还是比较清晰的:先设定左侧下标left、右侧下标right,根据leftright计算中间下标mid,每次根据nums[mid]target大小更新leftright,题解中有句话我非常赞同,写二分法时应当思考:
  “循环结束条件中 left 和 right 的关系,更新 left 和 right 位置时要不要加 1 减 1”

33.搜索旋转排序数组

35题中的二分法搜索适用于有序数组,本题中是旋转数组,因此需要结合首尾判断哪一部分为有序数组,以确定保留哪一部分,还是那句话: (多多思考一下   “循环结束条件中 left 和 right 的关系,更新 left 和 right 位置时要不要加 1 减 1”

81.搜索旋转排序数组II

本来可以和35相同的思路做,但是这个题又强调了数组中存在重复元素 ,哎,我看答案了…
看了一遍还是这个题解写的比较好,很好的结合了33题。

153.寻找旋转排序数组中的最小值

其实也是二分法的一种拓展,虽然可以直接min(nums),但既然题目要求了时间复杂度为O(logn)那就不要走内置函数拉~ 我感觉我是一边跟报错一遍试出来的答案…然后看到有答案用拐点去做的,最坏情况下,当nums=[1,2,3,...,n,0]时,时间复杂度为O(n)。