gpt4 book ai didi

javascript - 如何在 O(lg N) 时间内解决完美平方时避免极端情况?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:15:28 24 4
gpt4 key购买 nike

以下代码判断给定数字是否为 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;
};

最佳答案

通过保持智能不变量,我们可以更改代码,最终只需要进行一次相等性检查。应该适用于所有输入

var isPerfectSquare = function(num) {
let floor = 0, ceiling = num+1, mid;
// We will keep the invariants: floor*floor <= num,
// ceiling * ceiling > num

while (ceiling - floor > 1) {
mid = floor + (ceiling - floor) / 2 | 0;
let mul = mid * mid;

// Move one of floor/ceiling to mid
// Retains the invariant!
if (mul > num) {
ceiling = mid;
} else {
floor = mid;
}
}
return floor * floor === num;
};

我可能搞砸了语言语法,但这个想法应该可行。

关于javascript - 如何在 O(lg N) 时间内解决完美平方时避免极端情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41690439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com