链接
https://leetcode-cn.com/problems/sum-of-square-numbers/
耗时
解题:25 min
题解:7 min
题意
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a 2 + b 2 = c a^2 + b^2 = c a2+b2=c 。
提示:
- 0 <= c <= 2^31 - 1
思路
算出所有小于等于 2 31 − 1 2^{31} - 1 231−1 的平方数,存下来。遍历这个平方数数组,在这个数组中二分查找 c 减当前元素的元素,如果能二分找到,则说明存在;如果遍历完都找不到,则说明不存在。
时间复杂度: O ( 46341 l o g 46341 ) O(46341\ log\ 46341) O(46341 log 46341)
AC代码
class Solution {
public:
bool judgeSquareSum(int c) {
vector<int> sq({0});
for(int i = 1; i <= INT_MAX/i; ++i) {
sq.push_back(i*i);
}
for(int i = 0; i < sq.size() && sq[i] <= c; ++i) {
auto pos = lower_bound(sq.begin(), sq.end(), c-sq[i]);
if(pos != sq.end() && *pos == c-sq[i]) {
return true;
}
}
return false;
}
};