小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
点赞再看,养成习惯。微信搜索【一条coding】关注这个在互联网摸爬滚打的程序员。
本文收录于github-技术专家修炼,里面有我的学习路线、系列文章、面试题库、自学资料、电子书等。
二分查找,用x/m<m而不是m*m>x防止溢出
——leetcode此题热评
前言
哈喽,大家好,我是一条。
糊涂算法,难得糊涂
Question
69. x 的平方根
难度:简单
给你一个非负整数 x ,计算并返回 x 的 平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
示例 1:
输入:x = 4 输出:2示例 2:
输入:x = 8 输出:2解释:8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
提示:
0 <= x <= 231 - 1
Solution
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5
转换一下思维,把开放换成平方,那此题变为查找一个有确定范围的整数,且满足单调性(排好序)
立即推——二分查找
Code
所有
leetcode代码已同步至github欢迎
star
/**
* @author 一条coding
*/
class Solution {
public int mySqrt(int x) {
int l = 0, r = x, ans = -1;
while (l <= r) {
int mid = l + (r - l) / 2;
if ((long) mid * mid <= x) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
}
Result
复杂度分析
- 时间复杂度:O(logN)
Last
独脚难行,孤掌难鸣,一个人的力量终究是有限的,一个人的旅途也注定是孤独的。当你定好计划,怀着满腔热血准备出发的时候,一定要找个伙伴,和唐僧西天取经一样,师徒四人团结一心才能通过九九八十一难。 所以,
如果你也想进大厂,
想学好数据结构和算法,
想坚持刷题,
想有一群志同道合的伙伴,
请加入组队刷题