美文网首页
Leetcode 69 - Sqrt(x)

Leetcode 69 - Sqrt(x)

作者: BlueSkyBlue | 来源:发表于2018-07-10 09:11 被阅读10次

题目:

Implement int sqrt(int x).

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.
Example1:

Input:4
Output: 2

Example2:

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


思路:

此题采用二分法来做。首先求出中间元素值。然后用给定的值x分别除以中间值和中间值加一。得到的结果分别记为m1,m2

  • 如果m1等于中间值则返回m1
  • 如果m2等于中间值则返回中间值加一。
  • 如果m1大于中间值并且m2小于中间值加一,则返回m1

m1<中间值,相当于中间值的平方大于给定值x。此时在左半区找。
m1>中间值,相当于中间值的平方小于给定值x。此时在右半区找。


代码:

public int mySqrt(int x) {
        if(x <= 0)
            return 0;
        int start = 1;
        int end = x;
        while(start <= end){
            int mid = start + (end - start)/2;
            int m1 = x/mid;
            int m2 = x/(mid + 1);
            
            if(mid == m1)
                return m1;
            if(mid + 1 == m2)
                return mid + 1;
            if(m1 > mid && (mid + 1) > m2){
                return mid;
            }
            
            if(m1 < mid){
                end = mid;
            }else{
                start = mid + 1;
            }
        }
        return 1;
}

相关文章

网友评论

      本文标题:Leetcode 69 - Sqrt(x)

      本文链接:https://www.haomeiwen.com/subject/zwoxpftx.html