leetcode--4Sum
2016-09-09 09:50
232 查看
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d =
target? Find all unique quadruplets in the array which gives the sum of target.
Note: The solution set must not contain duplicate quadruplets.
解法:
target? Find all unique quadruplets in the array which gives the sum of target.
Note: The solution set must not contain duplicate quadruplets.
For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0. A solution set is: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]
解法:
#include<iostream> #include<vector> #include<algorithm> #include<cstdio> using namespace std; class Solution { public: vector<vector<int> > fourSum(vector<int>& nums, int target) { int numsSize=nums.size(); sort(nums.begin(),nums.end()); vector<vector<int> >results; for(int i=0;i<numsSize-3;i++) { if(num[i]>target&&nums[i]>=0) break; if(i>0&&nums[i-1]==nums[i]) continue; for(int j=i+1;j<numsSize-2;j++) { if(num[j]+nums[i]>target&&nums[j]>=0) break; if(j>i+1&&nums[j]==nums[j-1]) continue; int k=j+1; int l=numsSize-1; while(k<l) { if(k>j+1&&nums[k]==nums[k-1]) { k++; continue; } if(l<numsSize-1&&nums[l]==nums[l+1]) { l--; continue; } int sum=nums[i]+nums[j]+nums[k]+nums[l]; if(sum>target) { l--; continue; } if(sum<target) { k++; continue; } vector<int> result; result.push_back(nums[i]);result.push_back(nums[j]); result.push_back(nums[k]);result.push_back(nums[l]); results.push_back(result); k++; //cout<<"A result is "<<nums[i]<<" "<<nums[j]<<" "<<nums[k]<<" "<<nums[l]<<endl; } } } return results; } }; int main() { // Solution solution; // vector<int>nums; // nums.push_back(1); // nums.push_back(0); // nums.push_back(-1); // nums.push_back(0); // nums.push_back(-2); // nums.push_back(2); // vector<vector<int> > results; // results=solution.fourSum(nums,0); // for(int i=0;i<results.size();i++) // { // vector<int>result=results[i]; // printf("%d %d %d %d\n",result[0],result[1],result[2],result[3]); // } Solution solution; vector<int>nums; nums.push_back(0); nums.push_back(0); nums.push_back(0); nums.push_back(0); vector<vector<int> > results; results=solution.fourSum(nums,0); for(int i=0;i<results.size();i++) { vector<int>result=results[i]; printf("%d %d %d %d\n",result[0],result[1],result[2],result[3]); } }
相关文章推荐
- LeetCode 18. 4Sum
- leetcode 1|167.two sum 1|2 && 3.three sum && 16.3Sum Closest && 18. 4Sum
- Leetcode 2SUM-3SUM-4SUM
- leetcode 18 4Sum
- leetcode 4Sum(Java)
- LeetCode 017 4Sum
- leetcode18 4Sum
- Leetcode 18. 4Sum
- [LeetCode-Java]18. 4Sum
- LeetCode 018 4Sum
- leetcode 18. 4Sum
- Leetcode-18. 4Sum
- 【LeetCode】LeetCode——第18题:4Sum
- leetcode-18 4Sum
- LeetCode 018 4Sum
- LeetCode 18. 4Sum
- 【Leetcode】4Sum (Sum)
- Leetcode-2sum,3sum,4sum
- 4Sum 找4个数之和为target@LeetCode
- Leetcode121: 4Sum