class Solution {
public:
vector<vector<int> > fourSum(vector<int> &num, int target) {
vector< vector<int> > ret;
int len = num.size();
if(len < 4) return ret;
vector<int> num2;
num2.assign(num.begin(), num.end());
sort( num2.begin(), num2.end() ); // sort O(n*log(n))
vector<int> tmpRet(4);
tmpRet[0]=num2[0]-1;
for (int i=0;i<len-3;i++)
{
if (num2[i]==tmpRet[0])
continue;
tmpRet[0]=num2[i];
tmpRet[1]=num2[i]-1;
for (int j=i+1;j<len-2;j++)
{
int l=j+1;
int r=len-1;
if(num2[j]==tmpRet[1])
continue;
tmpRet[1]=num2[j];
while (l<r)
{
int sum2=num2[l]+num2[r];
if(num2[j]+sum2+tmpRet[0]==target){
tmpRet[2]=num2[l];
tmpRet[3]=num2[r];
ret.push_back(tmpRet);
while(num2[++l]==num2[l-1]&&l<r);
while(num2[--r]==num2[r+1]&&l<r);
}
else if(num2[j]+sum2+tmpRet[0]<target)
l++;
else
r--;
}
}
}
return ret;
}
};
4Sum
最新推荐文章于 2021-08-20 00:33:10 发布