二分查詢 三種模板(C 版本)

2021-10-01 02:14:14 字數 1221 閱讀 1341

int binarysearch(vector& nums, int target)

else if(nums[mid] < target)

else

}// end condition: left > right

return -1;

}

模板 #1 是二分查詢的最基礎和最基本的形式。

這是乙個標準的二分查詢模板,大多數高中或大學會在他們第一次教學生電腦科學時使用。

模板 #1 用於查詢可以通過訪問陣列中的單個索引來確定的元素或條件。

關鍵屬性:

區分語法:

int binarysearch(vector& nums, int target)

else if(nums[mid] < target)

else

}// post-processing:

// end condition: left == right

if(left != nums.size() && nums[left] == target) return left;

return -1;

}

模板 #2 是二分查詢的高階模板。它用於查詢需要訪問陣列中當前索引及其直接右鄰居索引的元素或條件。 

關鍵屬性:

區分語法:

int binarysearch(vector& nums, int target)

else if (nums[mid] < target)

else

}// post-processing:

// end condition: left + 1 == right

if(nums[left] == target) return left;

if(nums[right] == target) return right;

return -1;

}

模板 #3 是二分查詢的另一種獨特形式。 它用於搜尋需要訪問當前索引及其在陣列中的直接左右鄰居索引的元素或條件。

關鍵屬性:

區分語法:

二分查詢的三種模板

思路很簡單,細節是魔鬼。注意 搜尋區間,函式返回值的取值區間。搜尋乙個數,如果存在,返回其索引,否則返回 1。int binarysearch int nums,int target return 1 搜尋區間是閉區間 left,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...