每天一道leetcode69-x的平方根

本文详细解析了LeetCode上的第69题——求解x的平方根,通过使用二分查找算法,实现了intsqrt(int x)函数,计算并返回非负整数x的平方根,特别注意了数据类型的处理及边界条件。

前言

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

题目

leetcode 69 x的平方根

中文链接:

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

英文链接:

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

分类:二分查找这一类

题目详情

实现 int sqrt(int x) 函数。

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

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

示例 1:

输入: 4输出: 2

示例 2:

输入: 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;

代码

 1class Solution {
2    public  int mySqrt(int x) {
3        long low = 1;
4        long high = x;
5        while(low < high)
6        {
7            long mid = low + (high - low) / 2;
8            if(mid * mid == x)
9                return (int)mid;
10            else if(mid * mid > x)
11                high = mid - 1;
12            else
13                low = mid + 1;
14        }
15        if(low * low > x)
16            return (int)(low - 1);
17        return (int)low;
18    }
19}
  1. 思路就是我上面说的思路,其中要注意的就是,由于mid*mid的大小很可能会超过int的最大取值,所以这里,把low,high,mid用long来表示;

  2. 还有一点要注意的就是由于题目中要求返回的是int,所以这里应该最后进行类型转换;

  3. 15-16行代码就是代表,low的平如果比x大,那么由于是向下取整,所以返回low-1;第17行代码,就表示low的平方是小于x的,那么直接返回low即可

结束语

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

END

推荐阅读

每天一道leetcode154-寻找旋转排序数组(有重复数字)中的最小值

leetcode34-在排序数组中查找元素的第一个和最后一个位置

每天一道leetcode240-在二维数组中搜索n升级版

640?wx_fmt=jpeg3T编程资料等你来拿

640?wx_fmt=jpeg

长按指纹识别二维码关注



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值