1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> b; int n = nums.size(); if(n<4) return b; sort(nums.begin(), nums.end());
for(int i=0; i<n-3; i++){ if(i>0 && nums[i]==nums[i-1]) continue; if((long)nums[i]+nums[i+1]+nums[i+2]+nums[i+3] > target) break; if((long)nums[i]+nums[n-1]+nums[n-2]+nums[n-3] < target) continue;
for(int j=i+1; j<n-2; j++){ if(j>i+1 && nums[j]==nums[j-1]) continue; if((long)nums[i]+nums[j]+nums[j+1]+nums[j+2] > target) break; if((long)nums[i]+nums[n-1]+nums[n-2]+nums[j] < target) continue; int right = n-1; int left = j+1;
while(left<right) { int sum = nums[i]+nums[j]+nums[left]+nums[right]; if(sum==target){ b.push_back({nums[i], nums[j], nums[left], nums[right]}); while(left<right && nums[left]==nums[left+1]) left++; left++;
while(left<right && nums[right]==nums[right-1]) right--; right--; } else if(sum>target) right--; else left++; } } } return b; } };
|