leetcode-4Sum-18
输入数组,任选四个数字求和,输出所有和等于target的组合,组合不能重复。
还是先排序在用头尾指针,时间降到O^3。注意跳过相同的元素就能实现去重
1 class Solution { 2 public: 3 vector<vector<int> > fourSum(vector<int>& nums, int target) { 4 vector<vector<int> > v; 5 if(nums.size()<4) return v; 6 sort(nums.begin(),nums.end()); 7 for(int i=0;i<nums.size();i++){ 8 if(i>0&&nums[i]==nums[i-1]) continue; 9 for(int j=i+1;j<nums.size();j++){ 10 if(j>i+1&&nums[j]==nums[j-1]) continue; 11 int p=j+1,q=nums.size()-1; 12 while(p<q){ 13 int sum=nums[i]+nums[j]+nums[p]+nums[q]; 14 if(sum==target){ 15 vector<int> vv; 16 vv.push_back(nums[i]); 17 vv.push_back(nums[j]); 18 vv.push_back(nums[p]); 19 vv.push_back(nums[q]); 20 v.push_back(vv); 21 int tmp=nums[p]; 22 while(tmp==nums[p]) p++; 23 continue; 24 } 25 if(sum<target) p++; 26 else q--; 27 } 28 } 29 } 30 return v; 31 } 32 };