二分查找
- T(n) = O(1) + T( n/2) = O(log n)
- T(n) = O(1) + T(n-1) = O(n) 时间复杂度为: O(n)
- T(n) = O(1) + 2T(n/2) 时间复杂度: 还是O(n)
Recursion or While Loop
推荐使用 while loop
-
递归消耗资源
-
使用非递归, while 循环。
- 循环结束条件
- 四点要素
- start + 1 < end;
- mid = start + (end - start) / 2;
- A[mid]==, < , >
- A[start] A[end] ? target
when and How
- 需要优化一个O(n)的暴力算法得到一个更快的算法。
- sorted assry or Rotated Sorted Array.
- 找到第一个,或者是最后一个。
####Sqrt(x)
search insert position search in a big sorted Array.
First Bad Version
- 有重复的元素,和无重复的元素。 有重复时,不能通过二分法,只能暴力的循环。
find peak element
二分实现
- first / last position of xxx
- 去掉一定没有结果的一半, 保留一定有结果的一半。
O(log n) search target in Rotated sorted Array.
Recover Rotated Sorted Array.
三步翻转法:
题目
- Search Insert Position
- Search in a Big Sorted Array
- First Bad Version
- Find Peak Element
- Recover Rotated Sorted Array