二分搜尋小結 x的平方根

2021-09-12 13:44:57 字數 2161 閱讀 3465

二分查詢法作為一種常見的查詢方法,將原本是線性時間提公升到了對數時間範圍,大大縮短了搜尋時間,具有很大的應用場景,而在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...