二分查詢模版

2021-10-05 14:39:09 字數 739 閱讀 8085

用於一般的二分查詢

public

static

intbinsearch2

(int

arr,

int target)

if(arr[mid]

< target)

else

}return-1

;}

1、為啥是 lo = mid + 1,hi = mid - 1 而不是 lo = mid, hi = mid 呢?

看迴圈條件 while(lo <= hi) 可知,當 lo 和 hi 差值為 1 或 0 的時候仍然會繼續迴圈,此時 mid 的值就不更新了,為了防止 lo 和 hi 也不更新從而死迴圈,所以這裡要 + 1 和 -1。

2、這個基礎二分模板的優勢和弊端是啥呢?

好處是對於「有序陣列查詢目標值」很方便呢!

壞處是侷限性太強,對於其他二分問題就很雞肋,需要在原模板基礎上加上特殊的條件分支以及各種邊界判斷。

leetcode上甜姨發的萬能二分查詢模版,一般的二分查詢中和leetcode的1095題中已驗證,其他情況遇到的時候再試,先記錄。

public

static

intbinsearch1

(int

arr,

int target)

else

hi=mid;

}return-1

;}

二分查詢解題模版

常規 樸素的二分查詢 在一維陣列中查詢乙個數,有返回索引,無則返回 1 int binary search int arr,int n,int val else if arr mid val else return 1 變體1 可以總結為00001111問題,查詢滿足條件的第乙個1 int bina...

二分查詢模版 必背

注意點 跳出時都有lo 1 hi統一返回lo 1或hi lo 1 and hi nums.size 和 lo 0 and hi nums.size 1取中時一致 為什麼返回 lo 1 而不是 hi 退出迴圈時有 lo 1 hi 模板開始時將 lo,hi 看做是乙個開區間,通過不斷二分,最終這個區間中...

二分查詢 整數 模版

一段區間,定義一種性質使得區間被一分為二 二分查詢即為尋找滿足性質或不滿足性質的區間的邊界 區間被劃分為 l,mid 和 mid 1,r intbsearch 1 int l,int r 區間被劃分為 l,mid 1 和 mid,r intbsearch 2 int l,int r return l...