找出所有和为0的四元组4-Sum Problem

相关问题:Finding Longest Arithmetic Progressions

给定一个长度是n的整数数组,是否存在4个元素a,b,c,d,使得a+b+c+d=target,target为一个给定的整数?

INPUT:  = {1, 0, -1, 0, -2, 2}, and target = 0
OUTPUT: (-1, 0, 0, 1), (-2, -1, 1, 2) and (-2, 0, 0, 2)

思路:采用与3-Sum问题类似的算法。

代码:

class Solution {
public:
    vector<vector<int> > fourSum(vector<int> &num, int target) {
        vector<vector<int> > sol;
        sort(num.begin(), num.end());
        for(int i = 0; i < num.size(); ++i) {
            for(int j = i + 1; j < num.size(); ++j) {
                int low = j + 1;
                int high = num.size() - 1;
                while(low < high) {
                    int sum = num[i] + num[j] + num[low] + num[high];
                    if(sum > target)
                        high--;
                    else if(sum < target)
                        low++;
                    else {
                        vector<int> quadruplet(4);
                        quadruplet[0] = num[i];
                        quadruplet[1] = num[j];
                        quadruplet[2] = num[low];
                        quadruplet[3] = num[high];
                        if(find(sol.begin(), sol.end(), quadruplet) == sol.end())
                            sol.push_back(quadruplet);
                        low++;
                        high--;
                    }
                }
            }
        }
        return sol;
    }
};


你可能感兴趣的:(c,算法,Class,input,output)