二分查詢法作為一種常見的查詢方法,將原本是線性時間提公升到了對數時間範圍,大大縮短了搜尋時間,具有很大的應用場景,而在leetcode中,要運用二分搜尋法來解的題目也有很多,但是實際上二分查詢法的查詢目標有很多種,而且在細節寫法也有一些變化。
第一類: 需查詢和目標值完全相等的數
這是最簡單的一類,也是我們最開始學二分查詢法需要解決的問題,比如我們有陣列[2, 4, 5, 6, 9],target = 6,那麼我們可以寫出二分查詢法的**如下:
def
find
(nums,target)
: l, r =0,
len(nums)-1
while l < r:
mid = l +
(r-l)//2
if nums[mid]
== target:
return mid
elif nums[mid]
< target:
l = mid +
1else
: r = mid -
1return r
defmain()
: nums =[1
,2,4
,6,8
] target=
8print
(find(nums,target)
)main(
)
第二類: 查詢第乙個不小於目標值的數,可變形為查詢最後乙個小於目標值的數
這是比較常見的一類,因為我們要查詢的目標值不一定會在陣列**現,也有可能是跟目標值相等的數在陣列中並不唯一,而是有多個,那麼這種情況下nums[mid] == target這條判斷語句就沒有必要存在。比如在陣列[2, 4, 5, 6, 9]中查詢數字3,就會返回數字4的位置;在陣列[0, 1, 1, 1, 1]中查詢數字1,就會返回第乙個數字1的位置。我們可以使用如下**:
def
find
(nums,target)
: l, r =0,
len(nums)-1
while l < r:
mid = l +
(r-l)//2
if nums[mid]
== target:
return mid
elif nums[mid]
< target:
l = mid +
1else
: r = mid
defmain()
: nums =[0
,1,1
,1,1
] target=
1print
(find(nums,target)
)main(
)
69.實現 int sqrt(int x) 函式。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1:
輸入: 4
輸出: 2
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…,
由於返回型別是整數,小數部分將被捨去。
class
solution
:def
mysqrt
(self, x:
int)
->
int:
if x ==0:
return
0if x ==1:
return
1 l, r =
0, x -
1while l <= r:
mid = l +
(r-l)//2
if mid * mid <= x and
(mid+1)
*(mid+1)
> x:
return mid
elif mid*mid > x:
r = mid-
1else
: l = mid+
1
x 的平方根 二分查詢
實現int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2 示例 2 輸入 8 輸出 2說明 8 的平方根是 2.82842 由於返回型別是整數,小數部分將被捨去。二分查詢法應用於搜...
求x 的平方根 二分查詢
題目 實現 int sqrt int x 函式。實現 int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。思路 因為x是非負整數,那麼當x是0的時候平方根為0,x為1時平方根為1,只有當x大於1時才需要計算因...
x的平方根
題目三十九 實現int sqrt int x 函式,計算並返回 x 的平方根。您在真實的面試中是否遇到過這個題?yes 樣例sqrt 3 1 sqrt 4 2 sqrt 5 2 sqrt 10 3 挑戰 o log x class solution if i ix return i if i i x...