标签:right 28 mid 二分法 2021 69 平方根 解法 left
69. x 的平方根
链接:https://leetcode-cn.com/problems/sqrtx/
题目描述见链接内容。
解法:二分法
因为是在集中练习二分法时做到这道题目,自然而然就想到了使用二分法,按照那个套路:
while
的条件仍然是left < right
- 因为题目要找的平方根,并且只保留整数部分,实际上要找的就是平方小于等于
x
的最后一个下标,按照套路,if
的条件取反,那就是mid * mid > x
,这样mid
实际上是不需要保留的,所以if
下面的缩小规模的公式就是right = mid - 1
- 配套的
else
中的逻辑就是left = mid
- 因为
left = mid
出现,所以mid
应该向上取值,否则会陷入死循环,无法达成left === right
的条件 - 返回
left
所以写出代码:
var mySqrt = function (x) {
if (x === 0) {
return 0;
}
let left = 0,
right = x;
while (left < right) {
const mid = Math.ceil((left + right) / 2);
if (mid * mid > x) {
right = mid - 1;
} else {
left = mid;
}
}
return left;
};
- 时间复杂度:
${O(logn)}$
- 空间复杂度:
${O(1)}$
- 执行用时:96ms,在所有JavaScript提交中击败了84.93%的用户,内存消耗:38.9MB,在所有JavaScript提交中击败了96.67%的用户
我估计自己过一阵子可能会对自己写的又懵逼了,如果懵逼回头看看这篇总结
其他解法
看了官方题解,还有『袖珍计算器算法』和『牛顿迭代法』,我的高数知识、高中数学知识都被狗吃了,我放弃了这两种解法了。
标签:right,28,mid,二分法,2021,69,平方根,解法,left 来源: https://blog.csdn.net/duola8789/article/details/116237679
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。