class Solution {
public:
vector<vector<int> > fourSum(vector<int> &num, int target) {
sort(num.begin(),num.end());
int m,n,sum;
vector<vector<int> > result;
vector<int> a;
if(num.size() < 4)
return result;
for(int i = 0;i < num.size() - 3;i ++){
for(int j = num.size() - 1; j > i + 2;j --){
while(i > 0 && num[i] == num[i - 1])
i ++;
while(j < num.size() - 1 && num[j] == num[j + 1])
j --;
m = i + 1;
n = j - 1;
while(m < n){
sum = num[i] + num[j] + num[m] + num[n];
if(sum == target){
a.push_back(num[i]);
a.push_back(num[m]);
a.push_back(num[n]);
a.push_back(num[j]);
result.push_back(a);
a.clear();
//cout<<num[i]<<" "<<num[m]<<" "<<num[n]<<" "<<num[j]<<" "<<endl;
m ++;
}
else if(sum < target)
m ++;
else{
n --;
while(num[n] == num[n + 1]){
n --;
}
}
while(m > i + 1 && num[m] == num[m - 1]){
m ++;
}
}
}
}
return result;
}
};
[LeetCode] 4Sum
最新推荐文章于 2019-01-06 11:55:02 发布
本文介绍了一种在给定整数数组中寻找所有和等于特定目标值的四元组的算法。通过先对数组进行排序,然后使用双指针技术在O(n^3)的时间复杂度内解决问题。
8039

被折叠的 条评论
为什么被折叠?



