Cool说丨力扣69

简介: [69. x 的平方根](https://leetcode-cn.com/problems/sqrtx/)

69. x 的平方根

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

相乘穷举,可能溢出

   intmySqrt(intx) {

   if (x==0) return0;

   if (x<=3) return1;

   inti=2;//输入2147395600时报错,(i*i)也是个int,                //int,可保存不了这么大的数字,只好改为                  //long

   for (; i<x/2; ++i)

   {

       if ( (i*i<=x) && ((i+1)* (i+1) >x))

           returni;

   }

   returni;

   }

   intmySqrt(intx) {

   if (x==0) return0;

   if (x<=3) return1;

   longinti=2;//改为long后通过

   for (; i<x/2; ++i)

   {

       if ( (i*i<=x) && ((i+1)* (i+1) >x))

           returni;

   }

   returni;

   }

执行用时 :64 ms, 在所有 C++ 提交中击败了5.00%的用户

内存消耗 :8.1 MB, 在所有 C++ 提交中击败了90.43%的用户

二分法会更快一点

   intmySqrt(intx) {

   if (x==0) return0;

   if (x<=3) return1;

   intmin=0;

   intmax=x;

   while (max-min>1)

   {

       intm= (max+min) /2;

       if (x/m<m)//用x/m<m,而不是m*m<x可以防止溢出

           max=m;

       else

           min=m;

   }

   returnmin;

   }

   intmySqrt(intx) {

       longmid=0;

       longleft=0;

       longright=x;

       while (left<right)

       {

           mid= (left+right+1) /2;

           longsq=mid*mid; //或者这样也会更快一点

           if (sq>x)

           {

               right=mid-1;

           }

           else

           {

               left=mid;

           }

       }

       

       return (int)left;

   }


目录
相关文章
|
人工智能 C# C++
Cool说丨力扣153、454
153. 寻找旋转排序数组中的最小值 454. 四数相加 II
132 1
|
C# C++
Cool说丨力扣287/792/378
关注博主,获取更多知识
107 0
|
C# C++ 索引
Cool说丨力扣162
162. 寻找峰值
98 0
|
存储 C# C++
Cool说丨力扣29/34
关注博主。获取更多知识
106 0
|
存储 C# C++
Cool说丨力扣392
392. 判断子序列
75 0
|
C# C++
Cool说丨力扣744、704
744. 寻找比目标字母大的最小字母 704. 二分查找
108 0
|
C#
Cool说丨力扣475
475. 供暖器
115 0
|
机器学习/深度学习 算法 C#
Cool说丨力扣202
202. 快乐数
102 0
|
C#
Cool说丨力扣167
167. 两数之和 II - 输入有序数组
71 0
|
C# C++
Cool说丨力扣374、441
441. 排列硬币 374. 猜数字大小
97 0