[LeetCode] 4Sum 四数之和

简介:

Given an array S of n integers, are there elements abc, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.

Note:

  • Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
  • The solution set must not contain duplicate quadruplets.
    For example, given array S = {1 0 -1 0 -2 2}, and target = 0.

    A solution set is:
    (-1,  0, 0, 1)
    (-2, -1, 1, 2)
    (-2,  0, 0, 2)

LeetCode中关于数字之和还有其他几道,分别是Two Sum 两数之和3Sum 三数之和3Sum Closest 最近三数之和,虽然难度在递增,但是整体的套路都是一样的,在这里为了避免重复项,我们使用了STL中的set,其特点是不能有重复,如果新加入的数在set中原本就存在的话,插入操作就会失败,这样能很好的避免的重复项的存在。此题的O(n^3)解法的思路跟3Sum 三数之和基本没啥区别,就是多加了一层for循环,其他的都一样,代码如下:

// O(n^3)
class Solution {
public:
    vector<vector<int> > fourSum(vector<int> &nums, int target) {
        set<vector<int> > res;
        sort(nums.begin(), nums.end());
        for (int i = 0; i < int(nums.size() - 3); ++i) {
            for (int j = i + 1; j < int(nums.size() - 2); ++j) {
                int left = j + 1, right = nums.size() - 1;
                while (left < right) {
                    int sum = nums[i] + nums[j] + nums[left] + nums[right];
                    if (sum == target) {
                        vector<int> out;
                        out.push_back(nums[i]);
                        out.push_back(nums[j]);
                        out.push_back(nums[left]);
                        out.push_back(nums[right]);
                        res.insert(out);
                        ++left; --right;
                    } else if (sum < target) ++left;
                    else --right;
                }
            }
        }
        return vector<vector<int> > (res.begin(), res.end());
    }
};

本文转自博客园Grandyang的博客,原文链接:四数之和[LeetCode] 4Sum ,如需转载请自行联系原博主。

相关文章
|
人工智能
华为机试HJ26:字符串排序
华为机试HJ26:字符串排序
|
算法
华为机试HJ14:字符串排序
华为机试HJ14:字符串排序
华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)
华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)
154 0
NowCoder | KY11 二叉树遍历
NowCoder | KY11 二叉树遍历
|
算法
华为机试HJ108:求最小公倍数
华为机试HJ108:求最小公倍数
113 1
|
存储
[MRCTF2020]Xor 题解
[MRCTF2020]Xor 题解
111 0
|
测试技术
华为机试HJ85:最长回文子串
华为机试HJ85:最长回文子串
华为机试HJ12:字符串反转
华为机试HJ12:字符串反转
|
算法
LeetCode每日1题--四数之和
LeetCode每日1题--四数之和
85 0

热门文章

最新文章