前言
2018.10.31号打卡,今天你坚持了吗?
题目
leetcode 69 x的平方根
中文链接:
https://leetcode-cn.com/problems/sqrtx/
英文链接:
https://leetcode.com/problems/sqrtx/
分类:二分查找这一类
题目详情
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4输出: 2
示例 2:
输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去
题目详解
思路
这个题目的话,使用二分查找,left是1,high是数字x;
就是一个二分查找,不懂二分查找的看我的这篇文章,
每次去计算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}
思路就是我上面说的思路,其中要注意的就是,由于mid*mid的大小很可能会超过int的最大取值,所以这里,把low,high,mid用long来表示;
还有一点要注意的就是由于题目中要求返回的是int,所以这里应该最后进行类型转换;
15-16行代码就是代表,low的平如果比x大,那么由于是向下取整,所以返回low-1;第17行代码,就表示low的平方是小于x的,那么直接返回low即可
结束语
2018.10.31号打卡,今天你坚持了吗?
END
推荐阅读
每天一道leetcode154-寻找旋转排序数组(有重复数字)中的最小值
leetcode34-在排序数组中查找元素的第一个和最后一个位置
3T编程资料等你来拿

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

被折叠的 条评论
为什么被折叠?



