您的位置:首页 > 其它

Leetcode 69. Sqrt(x) (Easy)

2018-01-30 15:07 459 查看

1.题目

Implement 
int sqrt(int x)
.

Compute and return the square root of x.

x is guaranteed to be a non-negative integer.

Example 1:
Input: 4
Output: 2


Example 2:
Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since we want to return an integer, the decimal part will be truncated.


2.思路

错误思路:for循环i,如果i*i>x,返回i-1.这样运行到第8个case就会报错,因为发生了溢出。
修改思路:x开根号之后的值小于x/2+1,(x/2+1)2=x4/4+x+1>x。在此基础上,采用二分搜索进行查找。使用x/mid与mid比较,代替mid*mid与x比较,可以避免使用long型。

3.算法

class Solution {
public int mySqrt(int x) {
int low=1;
int high=x/2+1;

int mid=0;;
while(low<=high){

mid= high - (high - low)/2;
if(mid<x/mid)
low=mid+1;
else if(mid>x/mid)
high=mid-1;
else
return mid;
}
return high;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: