首页 > 其他 > 详细

491. Increasing Subsequences

时间:2018-07-14 15:34:42      阅读:158      评论:0      收藏:0      [点我收藏+]

 

这种increasing xxx 题真是老客户了.. 本题麻烦点在于不能重复, 但是和之前的那些 x sum的题目区别在于不能排序的

所以.... 我还是没搞定.

 

看了一个Java的思路是直接用set来存最终结果去重;  不太清楚Java的set自带比较函数? 用cpp的话就要为vector<int>编写hash函数...

cpp的方案有点特别, 每次递归的时候用一个哈希表记录有哪些数字已经用过了..很巧妙

 

class Solution {
public:
    typedef vector<int> VI;
    typedef vector<VI> VVI;
    void traverse(VVI &out, VI &item, VI &src, int i)
    {
        unordered_set<int> si;
        for(int j=i;j<src.size();++j)
        {
            if((item.empty()||src[j]>=item.back())&&si.find(src[j])==si.end())
            {
                item.push_back(src[j]);
              if(item.size()>1)out.push_back(item);
                traverse(out,item,src,j+1);
                item.pop_back();
                si.insert(src[j]);
            }
        }
    }
    vector<vector<int>> findSubsequences(vector<int>& nums) {
        VVI ret;
        VI item;
        traverse(ret,item,nums, 0);
        return ret;
    }
};

 

491. Increasing Subsequences

原文:https://www.cnblogs.com/lychnis/p/9309598.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!