c_cpp 给定一个整数数组,找到三元组,使得a ^ 2 + b ^ 2 = c ^ 2。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 给定一个整数数组,找到三元组,使得a ^ 2 + b ^ 2 = c ^ 2。相关的知识,希望对你有一定的参考价值。

vector<vector<int>> find_triplets(const vector<int>& A) {
    vector<vector<int>> res;
    int N = A.size();
    if(N < 3) return res;
    
    vector<long long> B;
    for(int i : A) B.push_back(i*i); // gist! push the square values
    
    // sort them in descending order not ascending order! 
    sort(B.begin(), B.end(), greater<int>());
    
    for(int i=0; i<N-2; ++i) {
        int j = i+1, k = N-1;       // i+1 not i
        while(j < k) {              // < not <=
            if(B[i] == B[j] + B[k]) {
                res.push_back({A[i], A[j], A[k]});
                ++j;                // forgot!!
                --k;
            }
            else if(B[i] < B[j] + B[k]) j++;
            else k--;
        }
    }
    return res;
}

以上是关于c_cpp 给定一个整数数组,找到三元组,使得a ^ 2 + b ^ 2 = c ^ 2。的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp [阵] 3sum最近。给定n个整数的数组S,在S中找到三个整数,使得总和最接近给定数字target。 Retur

leetcode刷题

三数之和

三数之和

三数之和

三数之和