Leetcode每日刷题之18.四数之和

1.题目解析

这里的18.四数之和与之前的三数之和有着异曲同工之妙,所以建议看完三数之和再来看本题,详细题目见Leetcode每日刷题之15.三数之和 ,只不过这里需要寻找的是四元组,也是不能寻找重复的四元组并且四元组内的数字可以按照任意顺序返回

2.算法原理

关于四数之和的思路是首先固定一个数 a,这时利用三数之和的思路找出符合三个数之和为target - a ,在后续的数组范围内固定另一个数 b,然后使用双指针找出符合两数之和为 target - a - b 的二元组即可,然后对双指针找出的二元组去重,再对数字 b 去重,最后对数字 a 去重即可

3.代码展示

cpp 复制代码
class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) 
    {
        //1.创建二维数存储数据
        vector<vector<int>> vv;
        
        //2.排序数组数据
        sort(nums.begin(),nums.end());

        int n = nums.size();
        //固定数 a
        for(int i = 0;i < n; )
        {
            //固定数 b
            for(int j = i + 1;j < n; )
            {
                int left = j + 1;
                int right = n - 1;
                long long aim = (long long)target - nums[i] - nums[j];
                while(left < right)
                {
                    int sum = nums[left] + nums[right];
                    if(sum < aim)
                    {
                        left++;
                    }
                    else if(sum > aim)
                    {
                        right--;
                    }
                    else
                    {
                        vv.push_back({nums[i],nums[j],nums[left],nums[right]});
                        //去重双指针找到的二元组
                        right--;
                        left++;
                        while(left < right && nums[right] == nums[right + 1])
                        {
                            right--;
                        }
                        while(left < right && nums[left] == nums[left - 1])
                        {
                            left++;
                        }
                    }
                }
                //去重 b
                j++;
                while(j < n && nums[j] == nums[j - 1])
                {
                    j++;
                }
            }
            //去重 a
            i++;
            while(i < n && nums[i] == nums[i - 1])
            {
                i++;
            }
        }
        return vv;
    }
};
相关推荐
QxQ么么4 小时前
移远通信(桂林)26校招-助理AI算法工程师-面试纪录
人工智能·python·算法·面试
Mz12217 小时前
day05 移动零、盛水最多的容器、三数之和
数据结构·算法·leetcode
SoleMotive.7 小时前
如果用户反映页面跳转得非常慢,该如何排查
jvm·数据库·redis·算法·缓存
念越7 小时前
判断两棵二叉树是否相同(力扣)
算法·leetcode·入门
complexor7 小时前
NOIP 2025 游记
数据结构·数学·动态规划·贪心·组合计数·树上问题·游记&总结
牢七7 小时前
数据结构1111
数据结构
ghie90908 小时前
线性三角波连续调频毫米波雷达目标识别
人工智能·算法·计算机视觉
却话巴山夜雨时i8 小时前
74. 搜索二维矩阵【中等】
数据结构·算法·矩阵
sin_hielo8 小时前
leetcode 3512
数据结构·算法·leetcode