LeetCode第[69]題(Java):Sqrt(x)

題目:求平方根html

難度:Easygit

題目內容算法

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.編程

Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.spa

翻譯翻譯

計算並返回x的平方根,其中x保證是一個非負整數。code

因爲退貨類型是一個整數,因此小數部分被截斷,而且只返回結果的整數部分。htm

Example 1:blog

Input: 4
Output: 2

Example 2:ip

Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since 
             the decimal part is truncated, 2 is returned.

個人思路一個正整數(除了0和1)的平方根必定是從1到x/2,之間的某一個數,因此就至關於查找算法,因此採用二分法便可

    須要注意的是,咱們的尋找條件,

  若是mid * mid > x   right = mid - 1;

  不然:此時mid * mid <= x,還知足,(mid+1) * (mid+1)> x 此時mid便可返回

     不然:left = mid +1;

個人代碼

 1     public int mySqrt(int x) {  2         if (x <= 1)  3             return x;  4         int left = 1, right = x/2;  5         while (true) {  6             int mid = left + (right - left)/2;  7             if (mid > x/mid) {  8                 right = mid - 1;  9             } else { 10                 if (mid + 1 > x/(mid + 1)) 11                     return mid; 12                 left = mid + 1; 13  } 14  } 15     }

個人複雜度:O(n)   

編程過程當中的問題

一、由於mid在判斷中也是判斷過了的,不像Search in Rotated Sorted Array那樣是等循環結束,因此left和right的下一個值都不須要再包括mid

 

 

答案代碼:和個人同樣。

相關文章
相關標籤/搜索