题目链接
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目解析
固定两个数,然后利用双指针来进行剩下两个数的筛选
主要使用的是三数之和的思想,具体可以看我上篇博客
注意去重
代码
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 longlong 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--;}}// 去重bj++;while(j<n&&nums[j]==nums[j-1]) j++;}// 去重ai++;while(i<n&&nums[i]==nums[i-1]) i++;}return ret;}
};