[LeetCode]4Sum

看到此文,是否觉得体内洪荒之力爆发,饥渴难耐想吐槽、情不自禁想捐赠
本文为原创文章,尊重辛勤劳动,可以免费摘要、推荐或聚合,亦可完整转载,但完整转载需要标明原出处,违者必究。

支付宝微  信

原题

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

Note:

The solution set must not contain duplicate quadruplets.

Example:

Given array nums = [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]
]

题解

本题的思路和3Sum一致,无非是多加一层循环。当然,时间复杂度就为O(n^3)了。

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector< vector<int> > rs;
        sort(nums.begin(), nums.end());
        int l = nums.size(), f = 0, b = 0;
        for (int i = 0; i < l - 3; ++i) {
            if (i > 0 && nums[i] == nums[i - 1]) continue;
            for (int j = i + 1; j < l - 2; j++) {
                f = j + 1;
                b = l - 1;
                if (j - i > 1 && nums[j] == nums[j - 1]) continue;
                while (f < b) {
                    if (nums[i] + nums[j] + nums[f] + nums[b] < target) {
                        while (nums[f] == nums[++f]) {}
                    } else if(nums[i] + nums[j] + nums[f] + nums[b] > target) {
                        while (nums[b] == nums[--b]) {}
                    } else {
                        vector<int> tmp = {nums[i], nums[j], nums[f], nums[b]};
                        rs.push_back(tmp);
                        while (nums[f] == nums[++f]) {}
                        while (nums[b] == nums[--b]) {}
                    }
                }
            }
        }
        return rs;
    }
};

时间复杂度:O(n^3)
空间复杂度:O(n)


原题:https://leetcode.com/problems/4sum/description/
文章来源:胡小旭 => [LeetCode]4Sum


这是一篇原创文章,如果您觉得有价值,可以通过捐赠来支持我的创作~
捐赠者会展示在博客的某个页面,钱将会用在有价值的地方,思考中...


分类: C/C++, 技术, 算法, 编程 | 标签: , , , , , | 评论 | Permalink

发表评论

电子邮件地址不会被公开。