原題:implementint sqrt(int x)
.
compute and return the square root of x.
******************************以下為引用***********************************=
牛頓迭代法
為了方便理解,就先以本題為例:
計算x2 = n的解,令f(x)=x2-n,相當於求解f(x)=0的解,如左圖所示。
首先取x0,如果x0不是解,做乙個經過(x0,f(x0))這個點的切線,與x軸的交點為x1。
同樣的道理,如果x1不是解,做乙個經過(x1,f(x1))這個點的切線,與x軸的交點為x2。
以此類推。
以這樣的方式得到的xi會無限趨近於f(x)=0的解。
判斷xi是否是f(x)=0的解有兩種方法:
一是直接計算f(xi)的值判斷是否為0,二是判斷前後兩個解xi和xi-1是否無限接近。
經過(xi, f(xi))這個點的切線方程為f(x) = f(xi) + f』(xi)(x - xi),其中f'(x)為f(x)的導數,本題中為2x。令切線方程等於0,即可求出xi+1=xi - f(xi) / f'(xi)。
繼續化簡,xi+1=xi - (xi2
- n) / (2xi) = xi - xi / 2 + n / (2xi) = xi / 2 + n / 2xi = (xi + n/xi) / 2。
有了迭代公式x
i+1= (x
i+ n/x
i) / 2,程式就好寫了。關於牛頓迭代法,可以參考wikipedia
。******************************引用結束***********************************
**:
class solution
return cur;}};
ac。要注意cur和pre都必須是double型別,否則無意義。 LeetCode長征系列 1Two Sum兩數之和
題目的啟示 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 num...
leetcode 打家劫舍系列
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。輸入 1,2,3,...
leetcode系列 twosum問題
題目描述 輸入 乙個陣列 nums 乙個數 target 輸出 從陣列中取兩個數使得兩數之和等於target,輸出這兩個數的下標 1,一開始的想法是,使用兩重迴圈直接一一遍歷,窮舉出這兩個數,並得到他們的下標 public static int twosum1 int nums,int target...