摘要:二分搜索復雜度時間因為整數長度有限空間思路我們知道必定存在這么兩個整數和,所以我們要做的其實就是縮小這個的范圍。代碼牛頓迭代法復雜度時間空間思路更好的解法是用數學方法,牛頓法是非常經典的求解方程的方法。
Sqrt
二分搜索 復雜度Implement int sqrt(int x).
Compute and return the square root of x.
時間 O(1) 因為整數長度有限 空間 O(1)
思路我們知道必定存在這么兩個整數a和b,a^2 <= sqrt(x) <= b^2,所以我們要做的其實就是縮小這個ab的范圍。使用二分法解這題時,通過比較mid^2和x大小來確定我們在哪一個半片中搜索。
注意這題的邊界條件較多,首先high要用long型存儲,其次如果有必要的話要判斷x是否是非負數。
代碼public class Solution { public int mySqrt(int x) { long low = 0 , high = x / 2; while(low <= high){ int mid = low + (high - low) / 2; if(mid * mid < x){ low = mid + 1; } else { high = mid - 1; } } return (int)high; } }牛頓迭代法 復雜度
時間 O(1) 空間 O(1)
思路更好的解法是用數學方法,牛頓法是非常經典的求解方程的方法。其基本公式是$$ x_{2}=x_{1}-frac{x_{1}^2-n}{2x_{1}} $$,其中x1是上次計算結果,x2是本次計算結果,當他的誤差小于一定值時返回。初始x值可選n/2,或者神奇數0x5f37642f。
代碼public class Solution { public int sqrt(int x) { // 如果初始值取0x5f37642f,則會進一步加快計算速度 double x1 = x/2.0; double x2 = 0.0, err = x2 - x1; while(Math.abs(err)>0.00000001){ x2 = x1 - (x1 * x1 - x) / (2 * x1); err = x2 - x1; x1 = x2; } return (int)x2; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64460.html
摘要:牛頓迭代法的原理很簡單,其實是根據在附近的值和斜率,估計和軸的交點,因此牛頓迭代法的公式為其實就是求切線與軸的交點。代碼利用牛頓法進行的更新,比直接從開始遍歷所作的循環要少牛頓迭代法的基本原理,請參考牛頓迭代法求開平方 描述 Implement int sqrt(int x). Compute and return the square root of x, where x is gu...
摘要:用數組標記非質數,每當出現一個為,計數器加一。關于質數有三點大于的質數一定是奇數,如,,奇數中的非質數也一定是奇數的乘積。首先,我們用從到進行標記。標記完所有的合數之后,再用到之間的遍歷,所有未被標記的質數。 Problem Count the number of prime numbers less than a non-negative number, n. Note 用數組fla...
摘要:代碼實現在控制臺打印總結本篇文章帶大家搭好環境,并體驗了控制臺打印。輸出結果總結熟練掌握取余和整除運算,大有作用。終止本次循環,繼續執行下一次循環。 ?本文收錄...
摘要:用具體的參數和返回值調用一個編譯的函數,而是一個編譯的函數的包裹,調用它會返回一個可以調用的函數。如果返回值是或你要指定不同宏,是還是。返回值用于傳給數據。對庫文件的限制調用函數作為中的函數指針使用返回一個整數來表示一個函數指針。 翻譯:云荒杯傾本文是Emscripten-WebAssembly專欄系列文章之一,更多文章請查看專欄。也可以去作者的博客閱讀文章。歡迎加入Wasm和emsc...
閱讀 3689·2021-10-13 09:40
閱讀 3149·2021-10-09 09:53
閱讀 3551·2021-09-26 09:46
閱讀 1848·2021-09-08 09:36
閱讀 4248·2021-09-02 09:46
閱讀 1314·2019-08-30 15:54
閱讀 3179·2019-08-30 15:44
閱讀 1023·2019-08-30 11:06