题意:
求x 的平方根(向下取整)。
方法一:
模拟
思路:循环遍历 ,找到 的平方是大于 ,返回.
class Solution { public: int mysqrt(int x) { int i=1; for(;i*i<=x;i++);//当i*i>x时,返回i-1 return i-1; } };
时间复杂度:空间复杂度:
方法二:
二分
思路:数值 的开方范围肯定在对这个区间内二分查找,即可找到答案。
class Solution { public: int mysqrt(int x) { if(x==1) return 1; long long l=1,r=x,mid; while(l<r){ mid=(l+r)/2;//二分 if(mid*mid>x)//如果大于x,则r=mid r=mid; else//否则l=mid+1 l=mid+1; } return (int)l-1; } };
时间复杂度:空间复杂度: