算法描述:
Given an array nums
of n integers and an integer target
, are there elements a, b, c, and d in nums
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.
Example:
Given array nums = [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]]
解题思路:与3Sum 思路一致。
vector> fourSum(vector & nums, int target) { vector > results; if(nums.size() < 4) return results; sort(nums.begin(),nums.end()); for(int i=0; i < nums.size()-3; i++){ if(i > 0 && nums[i] == nums[i-1]) continue; for(int j=i+1; j < nums.size()-2; j++){ if(j > i+1 && nums[j]==nums[j-1]) continue; int low = j+1; int high = nums.size()-1; while(low < high){ int sum = nums[i]+nums[j]+nums[low]+nums[high]; if(sum==target){ vector temp = {nums[i],nums[j],nums[low],nums[high]}; results.push_back(temp); while(low < high && nums[low]==nums[low+1]) low++; while(low < high && nums[high]==nums[high-1]) high--; low++; high--; } else if(sum < target) low++; else high--; } } } return results; }