1.3 Binary Search

1.1 Defination

Given an sorted integer array - nums, and an integer - target.

Find the any/first/last(maybe overtime) position of target in nums Return -1 if target does not exist.

Time Complexity

T(n) = T(n/2) + O(1) = O(logn): 通过O(1)的时间,把规模为n的问题变为n/2: recursive

通过O(n)的时间,把规模为n的问题变为n/2?: O(n)

• O(1) 极少

O(logn) 几乎都是二分法

• O(√n) 几乎是分解质因数

O(n) 高频

• O(nlogn) 一般都可能要排序

• O(n2) 数组,枚举,动态规划

O(n3) 数组,枚举,动态规划

O(2n) 与组合有关的搜索

O(n!) 与排列有关的搜索

比O(n)更优的时间复杂度, 几乎只能是O(logn)的二分法

Recursion or Non-Recursion

• 面试中是否使用 Recursion 的几个判断条件

  1. 面试官是否要求了不使用 Recursion (如果你不确定,就向面试官询问)

  2. 不用 Recursion 是否会造成实现变得很复杂

  3. Recursion 的深度是否会很深

  4. 题目的考点是 Recursion vs Non-Recursion 还是就是考你是否会Recursion?

• 记住:不要自己下判断,要跟面试官讨论!

1.2 Templete

Last position: 相等时 start = mid, 只有该情况会出现死循环

First position: if ==: end = mid

1.3 Examples

二分位置 之 OOXX 一般会给你一个数组

让你找数组中第一个/最后一个满足某个条件的位置 OOOOOOO...OO**X**X....XXXXXX

First Bad Version

Search In a Big Sorted Array

Find Minimum in Rotated Sorted Array

Search Insert Position

Search for a Range

Maximum Number in Mountain Sequence

在先增后减的序列中找最大值

Find Peak Element

思路:如果中间元素大于其相邻后续元素,则中间元素左侧(包含该中间元素)必包含一个局部最大值。如果中间元素小于其相邻后续元素,则中间元素右侧必包含一个局部最大值。

Search in Rotated Sorted Array

Search a 2D Matrix

Search a 2D Matrix II

Rotate Array

三步翻转法: • [4,5,1,2,3] → [5,4,1,2,3] → [5,4,3,2,1] → [1,2,3,4,5]

Reverse:

time=O(n)

space=S(1)

Recover Rotated Sorted Array

给定一个旋转排序数组,在原地恢复其排序。(升序)

算法课教程教的三步翻转。 注意!重要的事情说两遍: 找那个断点的地方不能用二分法!不要被楼上一些解答误导了! 找那个断点的地方不能用二分法!不要被楼上一些解答误导了! 套用二分法 find min in RSA的前提条件是:没有重复数!这题目遇到 1 1 1 1 1 1 1 1 1 0 1 1 1 1,用二分法会找错地方. 所以只能用打擂台!

Median of Two Sorted Array(hard)

Smallest Rectangle Enclosing Black Pixels(hard)

\744. Find Smallest Letter Greater Than Target

Last updated