🌈🌈🌈今天给大家分享的是:leetcode简单题{x的平方根}
目录
问题描述
给定一个非负整数 x
,我们需要计算并返回 x
的算术平方根,并且只保留整数部分,小数部分将被舍去。不允许使用任何内置指数函数和算符,如 pow(x, 0.5)
或 x ** 0.5
。
输入输出格式
- 输入 :一个非负整数
x
。 - 输出 :
x
的算术平方根的整数部分。
示例
- 输入:
x = 4
,输出:2
。 - 输入:
x = 8
,输出:2
(因为8
的算术平方根是2.82842...
,我们只取整数部分)。
算法分析
这个问题可以通过二分查找算法来解决。二分查找是一种在有序数组中查找特定元素的算法,其时间复杂度为 O(log n)
。在这个问题中,我们可以将二分查找应用于寻找整数平方根。
算法步骤
- 初始化两个指针
l
和r
,分别指向搜索范围的左边界(1)和右边界(x
)。 - 在
l
小于等于r
的条件下循环:- 计算中间值
mid
,为l
和r
的平均值,即mid = l + (r - l) / 2
。 - 计算
mid
的平方与x
的关系:- 如果
x / mid >= mid
,则说明mid
可能是平方根,或者平方根在mid
的右边,因此将l
设置为mid + 1
。 - 否则,平方根在
mid
的左边,将r
设置为mid - 1
。
- 如果
- 计算中间值
- 循环结束后,
ans
将保存x
的算术平方根的整数部分。
过题图片
代码实现
class Solution {
public int mySqrt(int x) {
int l = 1;
int r = x;
int ans = 0;
while (l <= r) {
int mid = l + (r - l) / 2;
long square = (long) mid * mid; // 用 long 防止溢出
if (square <= x) {
l = mid + 1;
ans = mid;
} else {
r = mid - 1;
}
}
return ans;
}
}
注意事项
- 在计算
mid
的平方时,我们将其转换为long
类型以防止整数溢出。 - 由于题目要求返回整数部分,我们不需要考虑小数点后的值。
题目链接
结论
通过二分查找算法,我们可以高效地计算出一个非负整数的算术平方根的整数部分。
🌈🌈🌈好啦,今天的分享就到这里!
🛩️🛩️🛩️希望各位看官读完文章后,能够有所提升。
🎉🎉🎉创作不易,还希望各位大佬支持一下!
✈️✈️✈️点赞,你的认可是我创作的动力!
⭐⭐⭐收藏,你的青睐是我努力的方向!
✏️✏️✏️评论:你的意见是我进步的财富!