用於一般的二分查詢
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...