【LeetCode 18】 四数之和 (中等) 双指针

在这里插入图片描述


代码:

class Solution {
    
    
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
    
    
        vector<vector<int>> ans;  
        int len=nums.size();
        sort(nums.begin(),nums.end()); //排序

        for(int i=0;i<len-3;i++)
        {
    
    
            if(i>=1 && nums[i]==nums[i-1]) continue; //防止重复
            for(int j=i+1;j<len-2;j++)
            {
    
    
                if(j>i+1 && nums[j]==nums[j-1]) continue; //防止重复
                int l=j+1,r=len-1; //双指针
                while(l<r)
                {
    
    
                    int sum=nums[i]+nums[j]+nums[l]+nums[r];
                    if(sum==target)
                    {
    
    
                        ans.push_back({
    
    nums[i],nums[j],nums[l],nums[r]});
                        while(l<r && nums[l]==nums[l+1]) l++; //防止重复
                        while(l<r && nums[r]==nums[r-1]) r--;
                        l++,r--;
                    }
                    else if(sum<target)  l++; //小了 左边往右
                    else   r--;	//大了 右边往左
                }
            }
        }
        return ans;
    }
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45260385/article/details/108856134
今日推荐