Leetcode第十八题(四数之和)

简介: 这篇博客介绍了LeetCode第18题“四数之和”的解法,通过排序和双指针技术来找出数组中所有和为特定值的四个不同元素的组合。

题目描述:

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。

示例 1:输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

​
class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>> ans;
        sort(nums.begin(),nums.end());
        //寻找第三个,第四个数
        for(int i = 0; i < nums.size(); i++){
            //去重
            if(i > 0 && nums[i] == nums[i -1]) continue;
            for(int j = i + 1;j < nums.size(); j++){
                //去重
                if(j > i + 1 && nums[j] == nums[j - 1]) continue;
                //寻找第一个跟第二个数
                int sum = target - nums[i] - nums[j];
                int l = j + 1,r = nums.size() - 1;
                while(l < r){
                    if(sum == nums[l] + nums[r]){
                        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 < nums[l] + nums[r])
                        r--;
                    else
                        l++;
                }
            }
        }
        return ans;
    }
};

​

在十五题三数之和的基础之上, 在外层套一层循环寻找第四个数

相关文章
|
JavaScript 前端开发 C语言
leetcode每日一题 2021/4/1 1006. 笨阶乘
leetcode每日一题 2021/4/1 1006. 笨阶乘
43 0
|
3月前
|
存储
Leetcode第十五题(三数之和)
LeetCode第十五题“三数之和”要求在一个整数数组中找出所有不重复的三元组,使得它们的和为0,通常通过先排序再使用双指针法来解决。
41 0
Leetcode第十五题(三数之和)
|
7月前
|
算法 容器
【LeetCode刷题】三数之和、四数之和
【LeetCode刷题】三数之和、四数之和
【每日一题】4.LeetCode——杨辉三角
【每日一题】4.LeetCode——杨辉三角
|
算法
代码随想录算法训练营第七天 | LeetCode 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
代码随想录算法训练营第七天 | LeetCode 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
47 0
|
JavaScript 索引
leetcode_18. 四数之和,n 数之和完结篇
题目链接:18. 四数之和 这个人已经靠 n 数之和水了好几篇文章了,已经不想再水了 我之前写过好几篇的 nSum 相关的文章,在我的个人主页里面搜索可以发现有三篇相关的文章,当然看的人不多,但是还是决定要把这个类型题写完,也就是今天的终章 `nSum`
leetcode_18. 四数之和,n 数之和完结篇
代码随想录刷题|LeetCode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
代码随想录刷题|LeetCode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
代码随想录刷题|LeetCode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
|
测试技术 C++
leetcode每日刷题(day2)--四数之和
leetcode每日刷题(day2)--四数之和
leetcode每日刷题(day2)--四数之和