【Leetcode】之sqrt(x)

原创 2016年06月01日 11:14:51

一.问题描述

Implement int sqrt(int x).

Compute and return the square root of x.

二.我的解题思路

给定一个整数x,要求解的是一个int型的m,使得该m满足: m*m <= x < (m+1)*(m+1)。
最直观的想法自然就是从1开始遍历1,2,...., m-1 。但是这样的复杂度自然是比较高的。为了降低时间复杂度,很自然地想到使用二分法。
当然这里还有一个小技巧,那就是当x>4时,x/2 * x/2肯定是>x的。所以对于x>4的取值,初始二分的区间尾部可以取成(x/2)-1,而不是x-1。测试通过的程序如下:
class Solution {
public:
    int mySqrt(int x) {
       if(x<0) return 0;
       if(x<=1) return x;
       int st=1;int end=x/2;
       if(x<=4) end=x-1;
       while(end>=st){
           int mid = (st+end)/2;
           if(mid==x/mid) return mid;
           if(mid<x/mid && (mid+1)>x/(mid+1)) return mid;
           if(mid<x/mid)
            st=mid+1;
            if(mid>x/mid)
                end=mid-1;
       }
       return 0;
    }
};

注意我这里是把程序做了一下变形,mid*mid<x 变为mid<x/mid。因为当x取值很大的时候,mid*mid可能会溢出。

相关文章推荐

LeetCode - 69. Sqrt(x)

方法一:Binary Search 这道题目是一个典型的binary search问题,看似比较简单,但其实陷阱也不少。一开始直接从1到x使用binary search来寻找答案,但结果竟然TLE了...

LeetCode | Sqrt(x)

Implement int sqrt(int x). 题目解析: 求开方根,只是求解整数,比较容易,如果求解double类型...

leetcode || 69、Sqrt(x)

problem: Implement int sqrt(int x). Compute and return the square root of x. Hide T...

LeetCode:69. Sqrt(x)

题目链接: 69. Sqrt(x) 题目描述: Implement int sqrt(int x) Compute and return the square root of x...
  • yums467
  • yums467
  • 2017年03月05日 22:34
  • 360

leetCode 69.Sqrt(x) (平方根) 解题思路和方法

Implement int sqrt(int x). Compute and return the square root of x. 思路:因为本题是int类型的数据,所以可以使用二分法...

[Leetcode] 69. Sqrt(x) 解题报告

题目: Implement int sqrt(int x). Compute and return the square root of x. 思路: 这道题目挺有意思,虽然基本思...

[LeetCode] Sqrt(int x)解题报告之无限逼近(牛顿法)

Implement int sqrt(int x). Compute and return the square root of x. 求一个数
  • hyc__
  • hyc__
  • 2014年11月14日 12:41
  • 1333

<LeetCode OJ> 69 / 367 Sqrt(x) / Valid Perfect Square

69. Sqrt(x) My Submissions Question Total Accepted: 79525 Total Submissions: 325488 Difficulty: ...

[LeetCode] Sqrt(x)

Sqrt(x) Implement int sqrt(int x). Compute and return the square root of x. 解题思路: 这道题是求x的平方根。 解法...

LeetCode(69) Sqrt(x)

题目Total Accepted: 67411 Total Submissions: 286086 Difficulty: Medium Implement int sqrt(int x).Comp...
  • fly_yr
  • fly_yr
  • 2015年10月03日 13:11
  • 726
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Leetcode】之sqrt(x)
举报原因:
原因补充:

(最多只允许输入30个字)