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;
    }
};

​

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

相关文章
|
1月前
|
存储
Leetcode第十五题(三数之和)
LeetCode第十五题“三数之和”要求在一个整数数组中找出所有不重复的三元组,使得它们的和为0,通常通过先排序再使用双指针法来解决。
37 0
Leetcode第十五题(三数之和)
|
算法
代码随想录算法训练营第四十七天 | LeetCode 198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III
代码随想录算法训练营第四十七天 | LeetCode 198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III
53 1
|
算法
代码随想录算法训练营第二十八天 | LeetCode 491. 递增子序列、46. 全排列、47. 全排列 II
代码随想录算法训练营第二十八天 | LeetCode 491. 递增子序列、46. 全排列、47. 全排列 II
61 0
leetcode 315周赛 解题报告
leetcode 315周赛 解题报告
65 0
LeetCode刷题集(七)(LeetCode70.爬楼梯)
LeetCode刷题集(七)(LeetCode70.爬楼梯)
82 0
|
存储
LeetCode刷题集(五)(LeetCode1.两数之和)
LeetCode刷题集(五)(LeetCode1.两数之和)
80 0
|
JavaScript 索引
leetcode_18. 四数之和,n 数之和完结篇
题目链接:18. 四数之和 这个人已经靠 n 数之和水了好几篇文章了,已经不想再水了 我之前写过好几篇的 nSum 相关的文章,在我的个人主页里面搜索可以发现有三篇相关的文章,当然看的人不多,但是还是决定要把这个类型题写完,也就是今天的终章 `nSum`
leetcode_18. 四数之和,n 数之和完结篇
|
机器学习/深度学习 Java Go
每日一题:Leetcode59. 螺旋矩阵 II
每日一题:Leetcode59. 螺旋矩阵 II
每日一题:Leetcode54. 螺旋矩阵
每日一题:Leetcode54. 螺旋矩阵