【发布时间】:2017-01-17 17:57:48
【问题描述】:
以下代码查找给定数字是否是 O(lg N) 中的完美平方。如何避免硬编码下面解决方案中给出的角落案例if (num === 1) { return true; }?有什么想法吗?
var isPerfectSquare = function(num) {
let floor = 0, ceiling = num, mid;
// Corner case
if (num === 1) {
return true;
}
while (floor != ceiling) {
mid = floor + (ceiling - floor) / 2 | 0;
let mul = mid * mid;
if (mul === num) {
return true;
}
if (mul > num) {
ceiling = mid;
}
else if (mul < num) {
floor = mid+1;
}
}
return false;
};
【问题讨论】:
-
@P0W 在标记为重复之前至少阅读问题的第一行。我不需要找到更快的解决方案。我的问题是关于避免极端情况。
-
@P0W,建议的欺骗被标记为 java,即使接受的答案是 C++
-
@baltusaj,是的,我知道它不是,即使不阅读问题正文也不应该被解释为这样。标签已经说不是。
-
一个小小的改变就可以解决问题..请查看下面的解决方案
标签: javascript algorithm big-o binary-search