前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天一道leetcode69-x的平方根

每天一道leetcode69-x的平方根

作者头像
乔戈里
发布2019-09-17 14:57:31
4510
发布2019-09-17 14:57:31
举报
文章被收录于专栏:Java那些事

前言

2018.10.31号打卡,今天你坚持了吗?

题目

leetcode 69 x的平方根

中文链接:

https://leetcode-cn.com/problems/sqrtx/

英文链接:

https://leetcode.com/problems/sqrtx/

分类:二分查找这一类

题目详情

实现 int sqrt(int x) 函数。

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

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

示例 1:

代码语言:javascript
复制
输入: 4输出: 2

示例 2:

代码语言:javascript
复制
输入: 8输出: 2说明: 8 的平方根是 2.82842...,
     由于返回类型是整数,小数部分将被舍去

题目详解

思路

  1. 这个题目的话,使用二分查找,left是1,high是数字x;
  2. 就是一个二分查找,不懂二分查找的看我的这篇文章,
  3. 每次去计算mid*mid与数字x的大小,如果比x大,那么就令high去等于mid-1;比x小,就令low等于mid+1;等于x,那么直接返回mid;

代码

代码语言:javascript
复制
class Solution {
    public  int mySqrt(int x) {
        long low = 1;
        long high = x;
        while(low < high)
        {
            long mid = low + (high - low) / 2;
            if(mid * mid == x)
                return (int)mid;
            else if(mid * mid > x)
                high = mid - 1;
            else
                low = mid + 1;
        }
        if(low * low > x)
            return (int)(low - 1);
        return (int)low;
    }
}
  1. 思路就是我上面说的思路,其中要注意的就是,由于mid*mid的大小很可能会超过int的最大取值,所以这里,把low,high,mid用long来表示;
  2. 还有一点要注意的就是由于题目中要求返回的是int,所以这里应该最后进行类型转换;
  3. 15-16行代码就是代表,low的平如果比x大,那么由于是向下取整,所以返回low-1;第17行代码,就表示low的平方是小于x的,那么直接返回low即可
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员乔戈里 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档