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 };

 

posted @ 2016-08-30 09:25  0_summer  阅读(101)  评论(0编辑  收藏  举报