二分查詢的三種形式

2021-10-25 15:22:31 字數 917 閱讀 4301

題目描述:在不重複有序陣列(公升序)中尋找目標數並返回它的下標,若沒找到返回-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 迴圈終止條件是 搜素區間為空。因為搜素區間是閉區間,所以迴...