首页 > 其他 > 详细

微软面试题: LeetCode 69. x 的平方根 出现次数:3

时间:2021-04-01 18:40:15      阅读:12      评论:0      收藏:0      [点我收藏+]

题目描述:

  求一个整数 x 的平方根,返回整数,结果是小数 ,就向下取整。

思路:

      x的平方根 一定在 [1,x ] 区间内,使用二分查找,在  O(log x) 时间就可找到。

代码如下所示。

 1 class Solution {
 2 public:
 3 //二分法 Time O(log x) 空间 O(1) 
 4     int mySqrt(int x)
 5     {
 6         int l = 1,h = x; // 目标值一定在 区间[l,h]内
 7         while(h - l > 1) //在区间只剩下两个元素时就要跳出循环,防止陷入死循环
 8         {
 9             int mid = l + (h - l)/2; //取中位数时,当数组元素个数偶数时总是取前一个
10             if((long)mid*mid == x)    return mid; // mid * mid 可能会超出 int
11             else if((long)mid*mid > x) //mid 肯定不是目标值了,区间范围缩小到[l,mid - 1]
12             {
13                 h = mid -1;
14             }
15             else //mid 仍然可能是目标值 区间范围 [mid,h],设置 while 条件 为 h - l > 1就是为了防止此处陷入死循环
16             {
17                 l = mid;
18             }
19         }
20         //区间内只可能还有 1 个元素 或者 2 个元素,优先取后面一个
21         return (long)h*h <= x?h:l;
22     }
23 };

 

微软面试题: LeetCode 69. x 的平方根 出现次数:3

原文:https://www.cnblogs.com/wangxf2019/p/14605838.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!