演算法程式設計11 二分法求平方根

2021-10-21 19:16:15 字數 1366 閱讀 1962

計算並返回 x 的平方根,其中 x 是非負整數。

由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。

示例 1

——————————————————————————————————

輸入: 4

輸出: 2

——————————————————————————————————

示例 2

——————————————————————————————————

輸入: 8

輸出: 2

——————————————————————————————————

說明: 8 的平方根是 2.82842…, 由於返回型別是整數,小數部分將被捨去。

本題可用二分法求解,但與常規的二分法有細微不同,因為mid * mid要不斷向 x 逼近,而不是去和 x 相等,也就是找的右邊界。

因為 x 的平方根一定不會大於 x 的一半(除了1以外,注意本題不算小數部分),因此可令右指標 right = x // 2 + 1,加1即考慮了x為1的情況

mid = (left + right + 1) // 2,多加了1是為了避免死迴圈,比如x = 9時,如果沒有多加1,會在[3,4]區間內一直出不來

迴圈條件是left < right,沒有 「=」 號,因為兩者相等的時候就已經找到了我們想要的結果,不需要再迴圈了。如果有 「=」 號的話會陷入死迴圈的,比如x = 1時,最後left = right = 1,有 「=」 號的話就出不了迴圈了。

class

solution

:def

mysqrt

(self, x:

int)

->

int:

# 為了照顧到 0 把左邊界設定為 0

left =

0# 為了照顧到 1 把右邊界設定為 x // 2 + 1

right = x //2+

1while left < right:

# 注意:這裡一定取右中位數,如果取左中位數,**可能會進入死迴圈

# mid = left + (right - left + 1) // 2

mid =

(left + right +1)

>>

1 square = mid * mid

if square > x:

right = mid -

1else

: left = mid

# 因為一定存在,因此無需後處理

return left

時間複雜度:o(logn)

空間複雜度:o(1)

二分法做平方根

注意這裡的浮點數 不然的話程式會報錯 coding utf 8 二分法計算20的平方根 import math a 0.0 多次二分後會變成二分法,所以要設定成浮點數,python裡就是直接賦值成浮點數 b c float raw input enter a number n 100 while t...

二分法求平方根(Python實現)

使用二分法 bisection method 求平方根。1 defsqrtbi x,epsilon 2assert x 0,x must be non nagtive,not str x 3assert epsilon 0,epsilon must be postive,not str epsilo...

Python用二分法求平方根

好了,正如標題所示,我們今天要用二分法來求平方根。首先要有數字,但是老是有人寫字串該怎麼辦呢?老是有人在寫數學題的時候打字串 try x int input please enter a whole number to measure to square root except print 然後是重...