zoukankan      html  css  js  c++  java
  • 90. Subsets II

    Problem:

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).

    Note: The solution set must not contain duplicate subsets.

    Example:

    Input: [1,2,2]
    Output:
    [
      [2],
      [1],
      [1,2,2],
      [2,2],
      [1,2],
      []
    ]
    

    思路
    采用的是递归的思想。每次产生新子集的时候都是由原来的所有子集添加新的数产生。
    首先将数组排序(书之间的相对大小其实并不重要,只是为了将相同的数合并在一起,方便计数),然后针对每一个新的数num,统计其个数count,将其加入原来的子集中,加入的种类总共可以有count+1种(不加,加一个num,加2个num,(cdots),加count个num),就可以得到所有不重复的子集。

    Solution:

    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<vector<int>> subsets{{}};
        sort(nums.begin(), nums.end());
            
        for (int i = 0; i < nums.size();) {
            int count = 0;      //用来统计某个数总共出现的次数
            while (i + count < nums.size() && nums[i] == nums[i+count])    count++;
            int sub_size = subsets.size();
            for (int j = 0; j < sub_size; j++) {
                vector<int> new_elem = subsets[j];
                for (int k = 0; k < count; k++) {
                    new_elem.push_back(nums[i]);
                    subsets.push_back(new_elem);
                }
            }
            i += count;
        }
        return subsets;
    }
    

    性能
    Runtime: 8 ms  Memory Usage: 9.3 MB

    相关链接如下:

    知乎:littledy

    欢迎关注个人微信公众号:小邓杂谈,扫描下方二维码即可

    作者:littledy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    客户端命令行查看dubbo服务的生产者和消费者
    灰度发布
    灰度发布方法了解
    spring事务隔离级别
    小东西
    从excel表中生成批量SQL,将数据录入到数据库中
    CSV导出
    详解Java的自动装箱与拆箱(Autoboxing and unboxing)
    java多线程理解
    spring事务传播行为讲解转载
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12258014.html
Copyright © 2011-2022 走看看