zoukankan      html  css  js  c++  java
  • 【Leetcode】【Medium】Subsets II

    Given a collection of integers that might contain duplicates, S, return all possible subsets.

    Note:

    • Elements in a subset must be in non-descending order.
    • The solution set must not contain duplicate subsets.

    For example,
    If S = [1,2,2], a solution is:

    [
      [2],
      [1],
      [1,2,2],
      [2,2],
      [1,2],
      []
    ]

    解题:

    先对S进行排序,然后继续按照Subsets I的思路,

    由于出现了重复元素,需要分别考虑:

    当出现的数字和上一个数字不同,保持原返回队列不变,对新出现的数字,分别插入已有数组的后面,形成新数组,加入返回值队列中;此时记录形成的新数组个数X;

    当出现的数字和上一个数字相同,保持原返回队列不变,从原返回队列的后方遍历X个已有数组,对这X个数组插入这个相同的数字,形成新数组,加入返回队列中;X值不变;

    代码:

     1 class Solution {
     2 public:
     3     vector<vector<int> > subsetsWithDup(vector<int> &S) {
     4         sort(S.begin(), S.end());
     5         vector<vector<int> > ret;
     6         ret.push_back(vector<int> ());
     7         int duplicate_record = 0;
     8         
     9         for (int i = 0; i < S.size(); ++i) {
    10             int pre_size = ret.size();
    11             
    12             if (i==0 || S[i] != S[i-1]) {
    13                 for (int j = 0; j < pre_size; ++j) {
    14                     vector<int> new_item(ret[j]);
    15                     new_item.push_back(S[i]);
    16                     ret.push_back(new_item);
    17                 }
    18                 duplicate_record = ret.size() / 2;
    19                 
    20             } else if (S[i] == S[i-1]) {
    21                 for (int j = pre_size - 1; j >= pre_size - duplicate_record; --j) {
    22                     vector<int> new_item(ret[j]);
    23                     new_item.push_back(S[i]);
    24                     ret.push_back(new_item);
    25                 }
    26             }
    27             
    28         }
    29         
    30         return ret;
    31     }
    32 };
  • 相关阅读:
    P1964 【mc生存】卖东西
    到达型01背包---P1877 [HAOI2012]音量调节
    组合数学---P1358 扑克牌
    分组背包---P1757 通天之分组背包
    01背包---P2392 kkksc03考前临时抱佛脚
    背包DP 方案数
    完全背包---P1679 神奇的四次方数
    01-背包---P2663 越越的组队
    17、排序算法-希尔排序
    16、排序算法-插入排序
  • 原文地址:https://www.cnblogs.com/huxiao-tee/p/4282955.html
Copyright © 2011-2022 走看看