二分查找思想
二分查找
??二分查找思想應用于對有序的數組進行查找操作。
時間復雜度
??二分查找也稱為折半查找,每次都能將查找區間減半,這種折半特性算法時間復雜度為O(logn)。
mid計算
有兩種計算中值mid的方式:
- m=(l+h)/2
- m=l+(h-l)/2
??l+h可能出現加法溢出,也就是說加法的結果大于整形能夠表示的范圍。但是l和h都為正數,因此h-l不會出現加法溢出的問題。所以,最好使用第二種計算方法。
變種
二分查找可以有很多變種,變種實現要注意邊界值的判斷。例如在一個有重復元素的有序數組中查找key的最左位置的實現如下:
public int binarySearch(int []nums,int key){int l=0;int h=nums.length-1;while(l<h){int m=l+(h-l)/2;if(nums[m]>=key){h=m;}else{l=m+1;}}return l; }該實現和正常實現有以下不同:
- h的復制表達式為h=m
- 循環條件為l<h
- 最后返回的l而不是-1
轉載于:https://www.cnblogs.com/yjxyy/p/11106095.html
總結
- 上一篇: 卷boot仅剩余XX空间
- 下一篇: Git 备忘录