zoukankan      html  css  js  c++  java
  • leetcode第一刷_Subsets II

    要求子集,有很现成的方法。N个数。子集的个数是2^N。每一个元素都有在集合中和不在集合中两种状态,这些状态用[0,pow(2,N)]中每一个数来穷举,假设这个数中的第i位为1,说明当前集合中包括源数组中的第i个数。

    至于有没有反复的元素,大部分有反复元素的问题,都能够借助一个vis集合,里面存放全部已经求得的集合或者其它形式的解。仅仅有少数题目会超时,哪些问题详细的说。

    class Solution {
    public:
        vector<vector<int> > subsetsWithDup(vector<int> &S) {
            int msize = S.size();
            int mindex = pow(2, msize);
            vector<vector<int> > res;
            set<vector<int> > mset;
            vector<int> tpres;
            sort(S.begin(), S.end());
            for(int i=0;i<mindex;i++){
                int mask = 1;
                for(int pos=0;pos<msize;pos++){
                    if(mask&i)  tpres.push_back(S[pos]);
                    mask<<=1;
                }
                if(find(mset.begin(), mset.end(), tpres) == mset.end()){
                    mset.insert(tpres);
                    res.push_back(tpres);
                }
                tpres.clear();
            }
            return res;
        }
    };


  • 相关阅读:
    【团队分享之二】IT团队绩效提升的一些见解
    我的ef连接mysql之旅
    Python3.5-20190501-廖老师的
    新装ubantu 18.04(自用)
    nginx配置url重写
    docker中crontab无法执行
    bootstrap
    mysql set
    mysqldump导出数据
    XGBoost 学习调参的例子
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6946148.html
Copyright © 2011-2022 走看看