int
binary_search
(int
nums,
int target)
else
if(nums[mid]
> target)
else
if(nums[mid]
== target)
}// 直接返回
return-1
;}
搜尋區間是兩端閉區間。
int
left_bound
(int
nums,
int target)
else
if(nums[mid]
> target)
else
if(nums[mid]
== target)
}// 最後要檢查 left 越界的情況
if(left >= nums.length || nums[left]
!= target)
return-1
;return left;
}
為了方便記憶,搜尋區間也是兩端閉區間。
int
right_bound
(int
nums,
int target)
else
if(nums[mid]
> target)
else
if(nums[mid]
== target)
}// 最後要檢查 right 越界的情況
if(right <
0|| nums[right]
!= target)
return-1
;return right;
}
為了方便記憶,搜尋區間也是兩端閉區間。
二分搜尋的關鍵就在於搜尋區間,明確了搜尋區間的定義(到底是兩端閉區間還是左閉右開區間),那麼直接根據邏輯寫**即可。需要注意的細節是:while退出條件、while結束後的檢查操作。
二分搜尋模板
正如bfs dfs有模板,二分搜尋也有模板。模板一 左閉右開 l,r public void bianrysearch int l int r else return l 是g m 成立的最小值 模板二 左閉右閉 l,r public void bianrysearch int l int r el...
二分搜尋的模板(一)
二分搜尋是演算法搜尋一部分的重要內容。雖然變化多端,但仍有跡可循,有法可依。記錄一下在網上遇到的模板 這個模版的核心是將二分搜尋 binary search 問題轉化成 在給定公升序陣列 沒有相同元素 中,尋找大於等於 target 值的最小索引或小於等於 target 值的最大索引。有幾點需要注意...
Java 二分搜尋 二分查詢
對陣列元素進行逐個查詢顯然是費時費力的工作,我們可以使用一些方法快速地搜尋出陣列中元素的指定位置.接下來我們介紹一種方法 二分搜尋法 二分搜尋法充分利用了元素間的次序關係.基本思想 將n元素分成個數大致相同的涼拌,取arr n 2 與欲查詢的x做比較,如果 下面將採用兩種方式 遞迴 非遞迴 來展示二...