x 的平方根 簡單問題不簡單

2021-10-24 08:34:45 字數 2718 閱讀 7615

leetcode 69:x 的平方根

返回的是只保留整數的部分

二分查詢

該題是乙個很經典的二分查詢演算法。

def

mysqrt

(self, x:

int)

->

int:

left, right =

1, x

while left <= right:

mid = left + right >>

1# 取整,相當於 // 2,除以二取整。

temp = mid **

2if temp == x:

return mid

elif temp > x:

right = mid -

1else

: left = mid +

1return right

要注意幾個點:

想想為什麼返回值是right而不是left?

不用left這一點,找幾個數演算一下就行了,它取得往往是向上取整,至於為什麼我也不太懂。

希望有懂的人指教一下。

擴充套件: 求 x 的平方根的準確值

def

mysqrt

(self, x:

int)

->

int:

left, right =

0, x

while right - left >1e-

6:# 計算精度,即退出條件

mid =

(left + right)/2

# 除法

temp = mid **

2if temp == x:

return mid

elif temp > x:

right = mid # 區間要連續變化

else

: left = mid

return right

牛頓法

牛頓迭代公式:

x n+

1=xn

−f(x

n)f′

(xn)

x_=x_-\frac\right)}\left(x_\right)}

xn+1​=

xn​−

f′(x

n​)f

(xn​

)​就是通過多次求經過某一點的切線與橫座標的交點而得到的。

設 r

rr 是 f(x

)=

0f(x)=0

f(x)=0

的根, 選取 x0x_

x0​ 作為 r

rr 的初始近似值, 過點 (x0

,f(x

0)

)\left(x_, f\left(x_\right)\right)

(x0​,f

(x0​

))做曲線 y=f

(x

)y=f(x)

y=f(x)

的切線 l

ll,l:y

=f(x

0)+f

′(x0

)(x−

x0),

l: y=f\left(x_\right)+f^\left(x_\right)\left(x-x_\right),

l:y=f(

x0​)

+f′(

x0​)

(x−x

0​),

則 ll

l 與 x

xx 軸交點的橫座標 x1=

x0−f

(x0)

f′(x

0)

,x_=x_-\frac\right)}\left(x_\right)},

x1​=x0

​−f′

(x0​

)f(x

0​)​

, 稱 x1x_

x1​ 為 r

rr

本次求平方根就相當於求解 f(x

)=x2

−a

f(x)=x^-a

f(x)=x

2−a 的零點,將方程帶入上述公式,就可以得到求根的表示式:

x n+

1=xn

+a/x

n2

x_=\frac+a / x_}

xn+1​=

2xn​

+a/x

n​​

**如下:

# 牛頓法

defmysqrt

(self, x:

int)

->

int:

r = x

while r **

2- x >=1:

# 設定精度,r 最終退出時,其平方與準確值之間小於 1。然後取整數部分即可。

r =(r + x/r)/2

return

int(r)

內建函式(偷懶法)
from math import sqrt

defmysqrt

(self, x:

int)

->

int:

return

int(sqrt(x)

)

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...

x的平方根

實現 int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。看到這個題,當時想到了利用二分法,查詢x的平方根。寫出了如下 public int mysqrt int x else if m m x m m 0 else return l 但是這個方法並不適用大數,因為m...

x的平方根

實現 int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2 示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842 由於返回型別是整數,小數部分將被捨去。袖珍計算器演算...