1. 程式人生 > 實用技巧 >微軟面試題: LeetCode 69. x 的平方根 easy 出現次數:6

微軟面試題: LeetCode 69. x 的平方根 easy 出現次數:6

題目描述:

實現int sqrt(int x)函式。

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

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

示例 2:

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

 1 class Solution {
 2 public:
 3 //二分法 Time O(log x) 空間 O(1) 
 4     int mySqrt(int x)
 5     {
 6         long int l = 1,h = x; // 目標值一定在 區間[l,h]內
 7         while
(h - l > 1) //在區間只剩下兩個元素時就要跳出迴圈,防止陷入死迴圈 8 { 9 long mid = l + (h - l)/2; 10 if(mid*mid == x) return mid; 11 else if(mid*mid > x) //mid 肯定不是目標值了,區間範圍縮小到[l,mid - 1] 12 { 13 h = mid -1; 14 } 15 else //mid 仍然可能是目標值 區間範圍 [mid,h],設定 while 條件 為 h - l > 1就是為了防止此處陷入死迴圈
16 { 17 l = mid; 18 } 19 } 20 //區間內只可能還有 1 個元素 或者 2 個元素,優先取後面一個 21 return h*h <= x?h:l; 22 } 23 };