二分法求陣列中比X小的元素個數

2021-07-11 06:24:00 字數 661 閱讀 8672

根據之前的關於三類二分法的** 我們知道關於二分法們可以選擇left < right -1來維護乙個左右元素的性質使得我們能夠使用二分對目標元素找到乙個範圍類似

a[left] < x a[right]>=x如果我們想要實現這個目標,只需要在

while(left

< right -1)

if(a[right] == x) return right;

else return -1;

if(a[right]==x) return right\\因為包括前面的a[0]

else return right;

如果這個元素很小,那麼在最後right = left+1 = 1 return rigth意味著比需要的位置多1個

如果這個元素很大,那麼在最後left = right -1,也還是right = left +1的位置的位置上,return right 意味著比需要的位置少1個

所以不能簡單地return left 或者right,需要兩個判斷

if(xreturn0;

if(x>a[right])

return right+1

;

二分法小總結

主要分為兩種 區間按序列劃分和區間按值劃分 區間按序列劃分 這種比較常見,一般是針對有序陣列或者部分有序陣列 如旋轉有序陣列 m是序列的中點,不斷的縮小區間。33 81 153 154 69 162 4 74 區間按值劃分 主要是無序陣列會使用,m取可能結果的最小值和最大值的中值,所以就是不停的猜m...

陣列元素的查詢 二分法查詢

1 2 二分法查詢演算法是基於排序的基礎之上 類庫中好像有 3 利用二分法對陣列元素程序查詢111 下標為0 222,333,444,555,666,777,888 4 查詢原理 5 找666這個元素的下標,此元素下標是5.6 陣列元素的下標為0 7 7 通過二分法查詢 0 7 2 中間元素下標 3...

陣列專題 二分法

刷題重來,打算按專題開始搞,看看前輩的經驗,總結一下 二分法的判斷 如果我認為target在 left,right 裡,那麼我的判斷條件應該定為left right,如果出了我的判斷,那麼只可能會是 right在left的左邊,這時候最佳的插入位置為left或者right 1 同理如果我認為targ...