主要講了按值二分搜索和掃描線。按值二分很好理解,掃描線的想法能解決一系列題目外潜,基本想法就是把start point 和 end point都加入到一個list里锣披,然后再排序贞间,然后通過一根垂直的掃描線從左到右掃一遍,每遇到一個點就處理一次雹仿。
1. Sqrt(x): 典型的按值二分
2. Maximum Average Subarray: 最大的均值肯定在min(nums)和max(nums)之間增热,也就是說這是按值搜索的上限和下限。但是在確定條件的時候比較tricky胧辽,利用前綴和數(shù)組找到是否存在一個sum[j] > sum[i] i in range(0, j-k+1) and j>=k峻仇,如果能找到的話,說明當前這個mid找小了邑商,更新左邊界摄咆,否則更新右邊界
3. Number of Airplanes in the Sky: 利用掃描線很容易解決
4. Divide Two Integers: 找divisor的個數(shù)的時候,每次二倍速的遞增被減數(shù)人断。
5. Find Peak Element: 那其中某個邊界做基準吭从,然后二分法
6. First Bad Version: 簡單的二分法
7. Find Peak Element II: 先找中間一行的最大值,然后可以知道在上半?yún)^(qū)還是下半?yún)^(qū)恶迈,然后找那個最大值的左右半?yún)^(qū)涩金,依次找下去就可以了
8. Wood Cut: 砍木頭,左邊屆是0右邊界是max(wood)
9. Copy Books: 最小值是左邊界蝉绷,最大值是右邊界鸭廷,然后就是二分法,條件是copy完所有的書所需要的人小于分配的人數(shù)
10. Sqrt(x) II: 左邊屆和右邊屆的差值設(shè)置為0.000001這樣
11. Find the Duplicate Number: 二分法熔吗,判斷條件是數(shù)array中比mid小的元素的個數(shù)
12. Smallest Rectangle Enclosing Black Pixels: 以給定點為某一個邊界辆床,然后搜索(0, x), (x, m-1), (0, y), (y, n-1),也就是說因為全部都是連通域桅狠,所以這些點在x軸上和y軸上的投影也必定是連續(xù)的點