题干
给定一个非负整数 c
,你要判断是否存在两个整数 a
和 b
,使得 a2 + b2 = c
。
注意:力扣的测试时会将一个整数的情况也算进去,这里需要处理一下
解法:双指针
思想:非负整数平方和可能存在的数为它之前的数,而之前的数都是有序的,因此可以考虑双指针。但是需要注意的是为了防止超时我们需要对右指针进行剪枝(开平方根)
执行用时:92 ms, 在所有 JavaScript 提交中击败了69.78%的用户
内存消耗:37.8 MB, 在所有 JavaScript 提交中击败了89.03%的用户
var judgeSquareSum = function (c) {
let begin = 0;
let end =Math.floor(Math.sqrt(c));
while (begin <= end) {
let temptarget = (begin * begin) + (end * end)
if (temptarget > c) {
end-=1
} else if (temptarget < c) {
begin += 1;
} else {
return true
}
}
return false
};