清華鄧公里面有這個二分查詢思路:
區間[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 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...