class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> vecArr; if(nums.size()<4) return vecArr; sort(nums.begin(),nums.end()); vector<int> vecElement; int num1 = INT_MIN; int num2 = INT_MIN; for(int iLoop1=0;iLoop1<nums.size();iLoop1++) { if(nums[iLoop1]==num1) continue; num1 = nums[iLoop1]; for(int iLoop2=iLoop1+1;iLoop2<nums.size();iLoop2++) { if(num2==nums[iLoop2]) continue; num2 = nums[iLoop2]; int sum12 = num1+num2; int target34 = target-sum12; //find 3 and 4 int iLeft = iLoop2+1; int iRight = nums.size()-1; if(iLeft<iRight){ if(nums[iLeft]<<1 > target34 || nums[iRight]<<1 < target34) continue; } while(iLeft<iRight){ int sum34 = nums[iLeft]+nums[iRight]; if(sum34==target34){ vecElement.clear(); vecElement.push_back(num1); vecElement.push_back(num2); vecElement.push_back(nums[iLeft]); vecElement.push_back(nums[iRight]); vecArr.push_back(vecElement); int currentNum3 = nums[iLeft]; while(iLeft < iRight && nums[iLeft]==currentNum3) iLeft++; int currentNum4 = nums[iRight]; while(iLeft < iRight && nums[iRight]==currentNum4) iRight--; } else if(sum34<target34) iLeft++; else iRight--; } } num2 = INT_MIN; } return vecArr; } };