二分查詢是刷題重要的一環,在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.函式功能 在陣列中以二分法檢索的方式查詢,...