相关问题: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;
}
};