Leetcode 69:x的平方根
题目描述:
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
示例 1:
输入:x = 4
输出:2
示例 2:
输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
思路:
看到数组并且有序的时候,进行查找操作可以使用二分查找。
一个数 x 的开方 sqrt 一定在 0 ~ x 之间,并且满足 sqrt == x / sqrt。可以利用二分查找在 0 ~ x 之间查找 sqrt。
二分查找最重要的是定区间,[left,right],有点类似头尾的双指针。
由于循环结束条件是left<=right,所以循环结束的时候left=right+1,所以最后返回的值应该是较小的right
代码:
class Solution {
public int mySqrt(int x) {
int left=1,right=x;
//闭区间
while(left<=right){
int mid=left+(right-left)/2;
int temp=x/mid;
if(temp<mid){
right=mid-1;
}else if(temp>mid){
left=mid+1;
}else if(temp==mid){
return mid;
}
}
return right;
}
}
PS:
二分查找mid的确定:
由于(left+right)/2的加法运算可能导致溢出,因此通常使用mid=left+(right-left)/2。
二分查找也称为折半查找,每次都能将查找区间减半,这种折半特性的算法时间复杂度为 O(logN)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)