題目描述:在不重複有序陣列(公升序)中尋找目標數並返回它的下標,若沒找到返回-1。
例子:[1, 2, 3],2;返回:1。見leetcode題(704):
上**:
public
intsearch
(int
nums,
int target)
return-1
;}
若完全理解,那麼**中的<=,可自行替換成<,替換後要更換其他部分**。
題目描述:返回有序陣列(公升序)中目標數第一次出現的下標,若沒找到返回-1。
例子:[1, 2, 2, 2, 3], 2;返回:1。
此處我們統一以閉區間解題。
**如下:
public
intbinarysearch
(int
nums,
int target)
if(left >= nums.length || nums[left]
!= target)
return-1
;// 處理可能存在的越界情況(目標數大於所有數)以及不存在目標數情況
return left;
// 也可返回 right + 1
}
右邊界與左邊界相似,可以在理解左邊界的基礎上自己實現。(參見附錄)
右邊界**如下:
public
intright_bound
(int
nums,
int target)
if(right <
0|| nums[right]
!= target)
return-1
;return right;
}
二分查詢 三種場景
也稱 折半查詢 binary search 使用前提 線性表採用順序儲存結構,表中元素按關鍵字有序排列 二分查詢是一種基於比較目標值和陣列中間元素的教科書式演算法。實現 維護兩個指標left,right,指標之間是搜尋區間 時間複雜度 o logn 空間複雜度 o 1 public int sear...
二分查詢的三種實現
int lower bound int a,int x,int y,int v return x 儘管查詢區間是左閉右開期間 x,y 返回值的候選區卻是閉區間 x,y 當v不存在時,返回的是第乙個比v大的值下標。int upper bound int a,int x,int y,int v retu...
二分查詢的三種模板
思路很簡單,細節是魔鬼。注意 搜尋區間,函式返回值的取值區間。搜尋乙個數,如果存在,返回其索引,否則返回 1。int binarysearch int nums,int target return 1 搜尋區間是閉區間 left,right 迴圈終止條件是 搜素區間為空。因為搜素區間是閉區間,所以迴...