您的位置:首页 > 其它

Leetcode-69: Sqrt(x)

2018-03-28 13:49 513 查看
这题我就用binary search做的,用牛顿迭代法应该更快。
解法1: binary search
注意:
1) 当x=INT32_MAX时,long long j=x+1会等于0。因为x+1还是integer,溢出后等于0,所以要加(long long)。
2) mid^2<=x<=(mid+1)^2时,要注意是否应该返回x+1。
3) j的上界可能不需要到x+1,下次要仔细想想。#include <iostream>

using namespace std;

int mySqrt(int x) {
long long i=0, j=(long long)x+1; //if j=x+1, then j=0!!!
while(i<j) {
long long mid=i+(j-i)/2;
if (mid*mid > x) {
j=mid;
}else if ((mid+1)*(mid+1)<x) {
i=mid+1;
}else { //mid^2<=x<=(mid+1)^2
if ((mid+1)*(mid+1)==x) return mid+1;
return mid;
}
}
}

int main()
{
cout<<mySqrt(4)<<endl;
cout<<mySqrt(9)<<endl;
cout<<mySqrt(10)<<endl;
cout<<mySqrt(2147395599)<<endl;
cout<<mySqrt(2147483647)<<endl; //maximum of INT_32!

return 0;
}解法2: 牛顿迭代法 (下次补充)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Leetcode