[Leetcode]四数之和
Leetcode-四数之和
题目描述
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
注意: 答案中不可以包含重复的四元组。
示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]
解题思路
参考Leetcode-三数之和,在此基础上加了一层循环
实现代码
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>>res;
int len=nums.size();
if(len==0)return res;
sort(nums.begin(),nums.end());
for(int first=0;first<len-3;first++){ //第一个数
if(first!=0&&nums[first]==nums[first-1]) //避免重复
continue;
for(int second=first+1;second<len-2;second++){ //第二个数
if(second!=first+1&&nums[second]==nums[second-1]) //避免重复
continue;
int third=second+1;
int forth=len-1;
while(third<forth){ //双指针
int sum=nums[first]+nums[second]+nums[third]+nums[forth];
if(sum>target)
forth--;
else if(sum<target)
third++;
else{
res.push_back({nums[first],nums[second],nums[third],nums[forth]});
third++;
forth--;
while(third<forth&&nums[third]==nums[third-1]) //避免重复
third++;
while(third<forth&&nums[forth]==nums[forth+1]) //避免重复
forth--;
}
}
}
}
return res;
}
};