Skip to main content

x的平方根69

地址:https://leetcode.cn/problems/sqrtx/?envType=problem-list-v2&envId=binary-search

题干

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

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

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

提示:

0 <= x <= 231 - 1

思路

类似35题的二分查找,用左右双指针查找,只需要看mid*mid是否还是太小或者太大,然后更新边界。注意最后返回的应该是右指针,而不是左,因为循环结束时 rptr 是最后一个平方 ≤ x 的数。如果直接返回 lptr,则会得到第一个不可行数,错误。

tip

平方函数在非负区间单调递增。

题解

class Solution {
public:
int mySqrt(int x) {
long long lptr = 0;
long long rptr = x;

while(lptr<=rptr){
long long mid = lptr + (rptr - lptr)/2;
if(mid*mid==x){
return mid;
}
else if(mid*mid<x){
lptr = mid+1;
}else{
rptr = mid -1;
}
}
return rptr;
}
};

本文字数:0

预计阅读时间:0 分钟


统计信息加载中...

有问题?请向我提出issue