leetcode-双指针-633. 平方数之和

 

 

我的第一直觉是hashmap,可能受两数之和的影响

class Solution {
public:
    bool judgeSquareSum(int c) {
        unordered_map<int, int> un_map;
        double n = sqrt(c);
        
        for(int i = 0; i <= n; i++){
            //cout<<"n:"<<un_map[i*i]<<endl;
            un_map[i*i] = i;
            if((c-i*i)==0)
                return true;
            if(un_map[c-i*i]>0)
                return true;
        }
        return false;
    }
};

但是双指针也是可以的

 

class Solution {
public:
    bool judgeSquareSum(int c) {
        long left = 0;
        long right = (int)sqrt(c);
        while (left <= right) {
            long sum = left * left + right * right;
            if (sum == c) {
                return true;
            } else if (sum > c) {
                right--;
            } else {
                left++;
            }
        }
        return false;
    }
};

 

posted @ 2021-08-10 16:33  三一一一317  阅读(31)  评论(0)    收藏  举报