题目链接
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目解析
固定两个数,然后利用双指针来进行剩下两个数的筛选
主要使用的是三数之和的思想,具体可以看我上篇博客文章来源:https://www.toymoban.com/news/detail-708206.html
注意去重文章来源地址https://www.toymoban.com/news/detail-708206.html
代码
class Solution
{
public:
vector<vector<int>> fourSum(vector<int>& nums, int target)
{
// 排序
sort(nums.begin(),nums.end());
int n=nums.size();
vector<vector<int>> ret;
for(int i=0;i<n;)
{
// 固定第一个值
int a=nums[i];
for(int j=i+1;j<n;)
{
// 固定第二个值
int b=nums[j];
int left=j+1,right=n-1;
// 可能会越界因此使用long long
long long d=(long long )target-a-b;
while(left<right)
{
int c=nums[left]+nums[right];
if(c<d)
{
left++;
}
else if(c>d)
{
right--;
}
else
{
ret.push_back({a,b,nums[left],nums[right]});
left++;
right--;
// 去重
while(left<right&&nums[left]==nums[left-1]) left++;
while(left<right&&nums[right]==nums[right+1]) right--;
}
}
// 去重b
j++;
while(j<n&&nums[j]==nums[j-1]) j++;
}
// 去重a
i++;
while(i<n&&nums[i]==nums[i-1]) i++;
}
return ret;
}
};
到了这里,关于LeetCode 18 四数之和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!