//这需要注意重复情况的消除
class Solution {
public:vector<vector<int> > fourSum(vector<int> &num, int target) {
sort(num.begin(),num.end());
vector<vector<int>> res;
for(int i=0;i<num.size();i++)
{
if(i>0 && num[i] == num[i-1])
continue;
for(int j=i+1;j<num.size();j++)
{
if(j>i+1 && num[j]==num[j-1])
continue;
int l = j+1;
int r = num.size()-1;
while(r>l)
{
if(l>j+1 && num[l]==num[l-1])
{l++;continue;}
if(r<num.size()-1 && num[r]==num[r+1])
{r--;continue;}
int t = num[i]+num[j]+num[l]+num[r];
if(t == target)
{
vector<int> temp;
temp.push_back(num[i]);
temp.push_back(num[j]);
temp.push_back(num[l]);
temp.push_back(num[r]);
res.push_back(temp);
l++;
//temp.clear();
}
else if(t > target)
r--;
else if(t < target)
l++;
}
}
}
return res;
}
};
本文介绍了一种解决四数之和问题的高效算法实现,通过先排序再使用双指针技巧来寻找四个数加起来等于目标值的所有组合,并有效避免了重复解。此方法在处理大规模数据集时表现出了较高的性能。
8040

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



