主要思想就是先排序,然后再求和,foursum的是复杂度可以降为n三次。
vector<vector<int>> fourSum(vector<int> &num, int target) {
sort(num.begin(), num.end());
vector<vector<int>>m;
int len=num.size();
int a,b;
for(int i=0;i<len;i++)
for(int j=i+1;j<len;j++)
{
a=j+1,b=len-1;
while (a<b) {
if(num[a]+num[b]==(target-num[i]-num[j])&&(a!=i)&&(b!=i)&&(a!=j)&&(b!=j))
{ vector<int>mm{num[a],num[b],num[i],num[j]};sort(mm.begin(),mm.end()); m.push_back(mm);}
if(num[a]+num[b]<(target-num[i]-num[j])) a++;
else b--;
}
}
m.erase(unique(m.begin(), m.end()),m.end());
return m;
}
int main(int argc, const char * argv[])
{
// insert code here...
vector<int>a{1, 0 ,-1, 0 ,-2,2};
fourSum(a, 0);
std::cout << "Hello, World!\n";
return 0;
}