633. 平方数之和

633. 平方数之和

给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 \(a^2 + b^2 = c\)

示例 1:

输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5

双指针

  • 共判断两个数字ab,要求平方之和等于c
  • 首先定义范围,最大的数字为sqrt(c),最小的数字为0,假设a <= b,那么有:
  • \(0 \leq a \leq b \leq \sqrt{c}\)
  • 左右指针分别指向左右,直至相等以后跳出循环。
class Solution {
public:
    bool judgeSquareSum(int c) {
        // 双指针
        long i = 0, j = sqrt(c);
        while(i <= j){
            long cur = i*i + j*j;
            if(cur == c)
                return true;
            else if(cur > c)
                j--;
            else 
                i++;
        }
        return false;
    }
};

posted @ 2021-04-28 15:26  andymori  阅读(217)  评论(0)    收藏  举报