二分查詢閉區間(l r)類總結

2021-10-08 21:59:30 字數 1126 閱讀 5014

最近做題遇到二分查詢,對於區間的取值以及最後的結果模稜兩可。對於(l<=r)這種閉區間的。取值的範圍是[left,right],一定要保證每次迴圈結束後left+1或者right-1,結束的狀態left>right,left在右邊,right在左邊,目標值下標確定是left。

本題相當於乙個陣列,左邊都是false,某乙個位置開始都是true。需要找到第乙個出現的true。使用閉區間計算,最後的時候left>right,所以left就是第乙個出現的true,right是最後乙個false,直接返回left即可。

/* the isbadversion api is defined in the parent class versioncontrol.

boolean isbadversion(int version); */

public

class

solution

extends

versioncontrol

return l;

}}

與上題分析相同,左邊都是滿足+1遞增的,找到第乙個不滿足的,也就是返回右邊部分的第乙個,直接返回left就可以

class

solution

return i;

}}

左邊的數都是滿足mid* mid<=x,右邊從某個位置開始mid*mid>x,所以需要找到左邊的最後乙個數,實際上就是返回right的下標,但本題考慮int溢位問題,所以使用ans記錄左邊的最後乙個下標,來代替返回high的位置。

class

solution

else

high=mid-1;

}return ans;

}}

給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。左邊的判斷條件是(nums[mid]class

solution

if(nums[mid]

l=mid+1;

}return l;

}}

二分查詢區間總結

筆者本以為二分查詢非常簡單,掌握一種會用不就差不多了,並不知道區間還分那麼多種,現在總結一下。比較一下其中的不同之處。為了更詳細乙個 閉區間 l,r int binary search int a,int size,int p else 左閉右開 l,r int binary search int ...

二分查詢總結

今天上csdn,發現一篇關於二分查詢演算法的文章被置頂,回帖也相當熱烈。我覺得演算法總重要的還是要了解思想,至於程式設計技巧則是其次。二分查詢在計算中演算法中的重要性不言而喻,許多變形的演算法都是基於此演變的,比如二分查詢樹等。所以此演算法程式我也打算總結一下。當然經典的演算法討論莫過於jon be...

二分查詢總結

我們假設乙個最簡單的環境,對於數x,按要求詢問它在乙個陣列a 假設從小到大 裡的位置,陣列個數為n。1.查詢最後乙個小於x的數的位置 常見的一種要求。返回小於x的其中的最右邊乙個數的下標。int half int x return r 2.查詢最後乙個小於或等於x的數的位置 返回小於或等於x的其中的...