491. Increasing Subsequences

Posted lychnis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了491. Increasing Subsequences相关的知识,希望对你有一定的参考价值。

 

这种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的主要内容,如果未能解决你的问题,请参考以下文章

491 Increasing Subsequences

491. Increasing Subsequences

491. Increasing Subsequences

491 Increasing Subsequences

491. Increasing Subsequences

491 Increasing Subsequences 递增子序列