labuladong_二分查詢

卡卡西殿發表於2024-03-14

零、二分查詢框架

複製程式碼
func binarySearch(nums []int, target int)int {
    left := 0, right := ...

    for ...  {
        mid := left + (right - left) / 2;
        if (nums[mid] == target) {
            ...
        } else if nums[mid] < target {
            left = ...
        } else if nums[mid] > target {
            right = ...
        }
    }
    return ...
}
複製程式碼

分析二分查詢的一個技巧是:不要出現 else,而是把所有情況用 else if 寫清楚,這樣可以清楚地展現所有細節。本文都會使用 else if,旨在講清楚,讀者理解後可自行簡化。

其中 ... 標記的部分,就是可能出現細節問題的地方,當你見到一個二分查詢的程式碼時,首先注意這幾個地方。後文用例項分析這些地方能有什麼樣的變化。

另外宣告一下,計算 mid 時需要防止溢位,程式碼中 left + (right - left) / 2 就和 (left + right) / 2 的結果相同,但是有效防止了 leftright 太大直接相加導致溢位

相關文章