• #leetcode刷题之路15-三数之和


    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

    注意:答案中不可以包含重复的三元组。

    例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

    满足要求的三元组集合为:
    [
    [-1, 0, 1],
    [-1, -1, 2]
    ]

    思路:先对vector进行排序,这样的话如果前两个数之和大于9,那么也就可以直接pass了

    然后把vector中的数依次放入map中,暴力循环,每次计算前两个数之和,再在map中找到第三个数,存在一个set中,再把set存在一个set中,避免重复。

    在不重复的情况下把这三个数放入vector中。

    #include<iostream>
    #include<vector>
    #include<map>
    #include<set>
    #include <algorithm>
    using namespace std;
    
    
    vector<vector<int>> threeSum(vector<int>& nums) {
        map<int,int> temp;
        vector<vector<int>> ans;
        set<set<int>> anss;
        int len = nums.size();
        int n = 0;
        sort(nums.begin(), nums.end());
        for (int i = 0; i < len; i++)
        {
            temp[nums[i]] = i;
        }
        for (int i = 0; i < len; i++){
            for (int j = i+1; j < len; j++)
            {
                int num = -nums[i] - nums[j];
                if (num>0) continue;
                map<int, int> ::iterator add = temp.find(num);
                if (add == temp.end() || add->second <= j) continue;
                set<int> t;
                t.insert(nums[i]);
                t.insert(nums[j]);
                t.insert(add->first);
                //cout << nums[i] << nums[j] << add->first << endl;
                if (anss.count(t) == 0)
                {
                    anss.insert(t);
                    vector<int> t;
                    t.push_back(nums[i]);
                    t.push_back(nums[j]);
                    t.push_back(add->first);
                    ans.push_back(t);
                    cout << nums[i] << nums[j] << add->first << endl;
                }
    
            }
        }
        return ans;
    }
    
    
    int main(){
        vector<int> a = { -1, 0, 1, 2, -1, -4 };
        vector<vector<int>> ans = threeSum(a);
        system("pause");
        return 0;
    }

  • 相关阅读:
    .Net Core使用Options模式来使用配置项
    git忽略已经提交的文件(git忽略文件不起作用)
    AirTest
    VSCode搭建rust开发环境
    动态编译和加载java代码
    JavaScript动态应用代码(有点像Java里的drools)
    Win10 Rust 编译报错: linking with `link.exe` failed: exit code: 1181
    git 拉取仓库的单个目录
    dart里实现类似Java里的--classpath的功能
    Rust离线安装
  • 原文地址:https://www.cnblogs.com/biat/p/10479668.html
Copyright © 2020-2023  润新知