二分法查詢 左閉右開,劃分區間

2021-10-23 20:27:55 字數 2086 閱讀 8381

清華鄧公里面有這個二分查詢思路:

區間[lo,hi) 表示待定區域,[0,lo),表示絕對小於value的區域, [mi,hi),表示大於等於value的區域

最後得到的lo 的語意剛好滿足,只不過本題給出的答案要加一,表示的不是秩,而是位置。

#

# 二分查詢

# @param n int整型 陣列長度

# @param v int整型 查詢值

# @param a int整型一維陣列 有序陣列

# @return int整型

#class

solution

:def

upper_bound_

(self , n , v , a )

:# write code here

lo =

0 hi =

len(a)

while lo < hi:

mi =

(lo + hi)//2

if a[mi]

< v:

lo = lo+

1else

: hi = mi

return lo+

1

class

solution

:def

missingnumber

(self, nums: list[

int])-

>

int:

lo =

0 hi =

len(nums)

while lo < hi:

mi =

(lo + hi)//2

if mi == nums[mi]

: lo = mi +

1else

: hi = mi

return lo

左閉右開的解法

[lo,hi) 表示待定的區間[0

,lo)

:表示等於的區間

[hi,

len(nums)

): 表示不等於的區間

最後返回的lo->hi, 表示乙個以lo的左側的分界線,左側都等於,右邊都不等於

寫**時,以劃分區間為起點,怎樣的條件可以正確的劃分區間。

# 絕對小於 target

lo =

0 hi =

len(nums)

while lo < hi:

mid =

(lo + hi)//2

if nums[mid]

< target:

lo = mid+

1else

: hi = mid

x1 = lo

# 絕對大於target

lo =

0 hi =

len(nums)

while lo < hi:

mid =

(lo + hi)//2

if target < nums[mid]

: hi = mid

else

: lo = mid +

1 x2 = lo -

1return x2-x1+

1用劃分區間的方法,使用二分法,劃分兩

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法查詢

前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...