C 二分查詢模板和leetcode原題示例

2021-10-09 23:41:03 字數 1115 閱讀 4762

二分查詢是刷題重要的一環,在leetcode較多題目都可以用二分查詢解決。二分查詢基本思想如下:

對乙個有序的資料集合,查詢的思想類似分治思想,每次通過跟區間的中間元素對比,將待查詢的區間縮小為之前的一半,直到找到要查詢的元素,或者區間縮小為0。

題目:leetcode-704. 二分查詢

/**

* 注意在實現的時候:

* 1、迴圈終止條件: low <= high

* 2、mid的取值,假如low和high比較大的話,取 (low + high) / 2,

* 容易發生溢位,改進的寫法 low + (high - low) / 2,

* 進行效能優化的話,可以寫成:low + ((high - low) >> 1)

* 3、low和high的更新

* low = mid - 1; high = mid + 1,假如low == high,並且在mid位置不等於 value,

* 那麼容易造成死迴圈。

**/int bsearch(vector&vec, int val) else if(vec[mid] > val)else if(vec[mid] < val)

}return -1;

}

求平方根

leetcode 69. x 的平方根

套用上面模板,求平方根ac**如下:

class solution 

else if(x / mid > mid)

else

}return high;

}};

leetcode 278. 第乙個錯誤的版本

這道題也是最簡單的二分題目之一,ac**如下:

// the api isbadversion is defined for you.

// bool isbadversion(int version);

class solution

else

}return low;

}};

c 二分查詢模板

一 查詢已遞增排序陣列a中大於等於 或者大於 給定target的第乙個元素的下標 當eq enable為true時 對應 大於等於 的情況 當eq enable為false時 對應 大於 的情況 intbinarysearch ge or g vector int a,int target,bool...

二分查詢模板

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。演算法思路 假設目標值在閉區間 l,r 中,每次將區間長度縮小一半,當l r時,我們就找到了目標值。模板一當區間 l,r 的更新操作是r mid l mid 1 時,計算mid時不需要加1。int bsearch 1 in...

二分查詢模板

例如陣列中查詢乙個數 二分查詢的前提是整個陣列是有序的 模板 int a n int l 0,r n 1 int mid,key while l r 另外還有一些二分查詢函式 a.函式模板 binary search arr,arr size indx c.函式功能 在陣列中以二分法檢索的方式查詢,...