LeetCode 第 69 題 (Sqrt(x))
LeetCode 第 69 題 (Sqrt(x))
Implement int sqrt(int x).
Compute and return the square root of x.
求 x 的平方根。我們知道
\sqrt{x}
是單調增函式, 1 \leq \sqrt{x} \leq x
。所以可以用二分查詢法來計算。
int mySqrt(int x)
{
if(x <= 0) return 0;
int a1 = 1;
int a2 = 46341 * 2 - 1;
unsigned int a, y;
if(a2 > x / 2) a2 = x;
do
{
a = (a1 + a2) / 2;
y = a * a;
if(y == x) return a;
if(y > x)
{
a2 = a;
}
else
{
a1 = a;
}
}while(a1 + 1 < a2);
a = (a1 + a2) / 2;
return a;
}
這個程式比較講究的地方是 a2 = 46341 * 2 - 1 。之所以這麼去是為了使第一次迴圈時 a = (a1 + a2) / 2 = 46341。
46341 是個比較特殊的數,
46341^2
大於 INT_MAX 的最小的整數的平方數。這樣可以保證這個二分查詢法能覆蓋所有整數範圍,並且保證迴圈次數是最少的。 相關文章
- leetcode-69. Sqrt(x)LeetCode
- Leetcode Sqrt(x)LeetCode
- LeetCode 之 JavaScript 解答第69題 —— X 的平方根(Squrt(x))LeetCodeJavaScript
- Leetcode-Sqrt(x)LeetCode
- Sqrt(int x) leetcode javaLeetCodeJava
- LeetCode 第 50 題 (Pow(x, n))LeetCode
- 【Lintcode】141. Sqrt(x)
- 《HelloGitHub》第 69 期Github
- Leetcode第1~10題LeetCode
- LeetCode題解第122題LeetCode
- LeetCode刷題之第701題LeetCode
- LeetCode 第 7 題(Reverse Integer)LeetCode
- LeetCode 第 342 題(Power of Four)LeetCode
- LeetCode 第 343 題 (Integer Break)LeetCode
- LeetCode 第 66 題 (Plus One)LeetCode
- LeetCode 第 9 題(Palindrome Number)LeetCode
- LeetCode 第 190 題 (Reverse Bits)LeetCode
- LeetCode 第 37 題 (Sudoku Solver)LeetCode
- LeetCode 第 326 題 (Power of Three)LeetCode
- LeetCode 第 65 題(Valid Number)LeetCode
- [leetcode 第 400 場周賽]題解LeetCode
- KMP演算法(Leetcode第28題)KMP演算法LeetCode
- leetcode的第9題:迴文數LeetCode
- LeetCode 第 231 題 (Power of Two)LeetCode
- LeetCode 第 191 題 (Number of 1 Bits)LeetCode
- LeetCode 第 338 題 (Counting Bits)LeetCode
- LeetCode 第 14 題(Longest Common Prefix)LeetCode
- JavaScript Math.sqrt()JavaScript
- sqrt-data-structureStruct
- Leetcode 第136場周賽解題報告LeetCode
- LeetCode 第 125 題 (Valid Palindrome)LeetCode
- LeetCode 第 21 題 (Merge Two Sorted Lists)LeetCode
- LeetCode 第 86 號問題:分割連結串列LeetCode
- JavaScript Math.SQRT2JavaScript
- JavaScript Math.SQRT1_2JavaScript
- Leetcode Pow(x,n)LeetCode
- 69 個經典 Spring 面試題和答案Spring面試題
- 69個經典Spring面試題和答案Spring面試題