1 struct quadruplet{ 2 int a,b,c,d; 3 quadruplet() {} 4 quadruplet(int aa,int bb,int cc,int dd){ 5 this->a=aa; this->b=bb; this->c=cc; this->d=dd; 6 } 7 bool operator<(const quadruplet& t)const{ 8 if((a-t.a<0)||(a==t.a&&b<t.b)||(a==t.a&&b==t.b&&c<t.c)||(a==t.a&&b==t.b&&c==t.c&&d<t.d)) return true; 9 return false; 10 } 11 }; 12 class Solution { 13 public: 14 vector<vector<int>> fourSum(vector<int>& nums, int target) { 15 sort(nums.begin(),nums.end()); 16 17 vector<vector<int> > ans; ans.clear(); 18 if(nums.size()<=3) return ans; 19 20 int cntAns=0; 21 vector<int> tmp(4); tmp.clear(); 22 set<quadruplet> st; st.clear(); 23 24 int left,right,sum; 25 26 for(int i=0;i<=nums.size()-4;i++){ 27 for(int j=i+1;j<=nums.size()-3;j++){ 28 left=j+1; 29 right=nums.size()-1; 30 while(left<right){ 31 sum=nums[i]+nums[j]+nums[left]+nums[right]; 32 if(sum==target){ 33 tmp.push_back(nums[i]); tmp.push_back(nums[j]); 34 tmp.push_back(nums[left]); tmp.push_back(nums[right]); 35 sort(tmp.begin(),tmp.end()); 36 37 quadruplet quad=quadruplet(tmp[0],tmp[1],tmp[2],tmp[3]); 38 if(!st.count(quad)){ 39 st.insert(quad); 40 ans.resize(++cntAns); 41 ans[cntAns-1]=tmp; 42 } 43 tmp.clear(); 44 45 right--; left++; 46 } 47 else if(sum>target) right--; 48 else left++; 49 } 50 } 51 } 52 53 54 return ans; 55 } 56 };