二分法進階:By value 和 By index 的兩種二分法

二分法的關鍵是確定 “搜索空間”,一般分爲兩種: 索引和值。

以索引爲搜索空間: 最簡單的例子是在一維排序數組上尋找某個數,我們以[0, n]爲搜索空間,不斷減少該空間。
以值爲搜索空間: 即我們可以從 [min, max] 的範圍尋找某個數,一般適用於沒在一個方向上排序的問題,像leetcode 378和leetcode410。

爲了節約篇幅,本文認爲讀者已經知道如何在排序的矩陣中用二分法找到某個數。
定義兩個函數:
+ count() : 尋找 matrix 中小於等於 target 的元素個數。 時間複雜度: O(logn), n爲 matrix 元素個數
+ countSmaller() : 同上,只不過是尋找小於target 元素的個數。

By Value 的二分法:
min 是 matrix[0][0], max 是 matrix[n][n],每次取區間的中值,根據count() 判斷是往左還是往右。很多題解已經說過,不在贅述。

By Index 的二分法:
二分法本質是利用單調性淘汰多餘的「搜索空間」,所以在選擇 index 時應該選擇無論怎樣都可以淘汰搜索空間的地方。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章