美文网首页
leetcode-四数之和

leetcode-四数之和

作者: weilu56 | 来源:发表于2018-08-06 16:05 被阅读0次

原理和三数之和相同,但多了一层循环,复杂度为 O(n^3)

#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
vector<vector<int>> fourSum(vector<int> &nums, int target) {
    sort(nums.begin(), nums.end());
    vector<vector<int>> res;
    int size = nums.size();
    for (int i = 0; i < size - 3; i++) {
        // 去除重复
        if (i > 0 && nums[i] == nums[i - 1]) {
            continue;
        }
        for (int j = i + 1; j < size - 2; j++) {
            // 去除重复
            if (j > i + 1 && nums[j] == nums[j - 1]) {
                continue;
            }
            int left = j + 1;
            int right = size - 1;
            while (left < right) {
                if (nums[i] + nums[j] + nums[left] + nums[right]==target) {
                    res.push_back(vector<int>({ nums[i] , nums[j] , nums[left] , nums[right] }));
                    //考虑未来,避免重复
                    while (left<right && nums[left] == nums[left+1]) {
                        left++;
                    }
                    while (left<right && nums[right] == nums[right - 1]) {
                        right--;
                    }
                    left++;
                    right--;
                }
                else if (nums[i] + nums[j] + nums[left] + nums[right] > target) {
                    right--;
                }
                else {
                    left++;
                }
            }
        }
    }
    return res;
}
void main() {
    vector<int> vecInt = { -1,-5,-5,-3,2,5,0,4 };
    auto item = fourSum(vecInt, -7);
    for (auto pitem:item) {
        for (auto citem : pitem) {
            cout << citem << '\t';
        }
        cout << endl;
    }
}

相关文章

  • leetcode-四数之和

    原理和三数之和相同,但多了一层循环,复杂度为 O(n^3)。

  • LeetCode-两数之和

    作为菜鸟,开始练习数据结构第二道题 两数之和题目描述给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你...

  • LeetCode-两数之和

    来年就要找工作了,刷刷lc复习数据结构和算法。两数之和是第一道题,可能也是最简单的一道题,我准备从这里开始记录我的...

  • LeetCode-两数之和

    题目: 题目链接给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整...

  • leetcode-两数之和

    给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] ...

  • leetcode-两数之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的...

  • LeetCode-两数之和

    题目链接 => 戳这里 题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目...

  • leetcode-三数之和

    这道题用了双指针法。 首先对数组进行排序,排序后固定一个数 nums[i],再使用左右指针指向 nums[i]后面...

  • LeetCode-两数之和

    语言:python classSolution: deftwoSum(self,nums:List[int],ta...

  • 【leetcode-数组】三数之和

    【leetcode-数组】三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 ...

网友评论

      本文标题:leetcode-四数之和

      本文链接:https://www.haomeiwen.com/subject/xvrgvftx.html