首页 > 其他分享 >491. 递增子序列

491. 递增子序列

时间:2023-04-15 13:57:39浏览次数:30  
标签:nums res 递增 vector startdex 序列 path 491 size

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。

> 解法一

class Solution {
private:
    void traversal(vector<int> &nums,int startdex){
       if(startdex > nums.size()) return;
       if(path.size() >= 2) res.emplace_back(path);
       std::unordered_map<int,bool> mp; 
       for(int i = startdex; i < nums.size(); i++){
            if(mp[nums[i]]) continue;
            if((path.empty()) || (!path.empty() && path.back() <= nums[i])){
                mp[nums[i]] = true;
                path.emplace_back(nums[i]);
                traversal(nums,i+1);
                path.pop_back();
            }
            else continue;
       }
    }
public:
    vector<vector<int>> res;
    vector<int> path;
    vector<vector<int>> findSubsequences(vector<int>& nums) {
        res.clear();
        path.clear();
        traversal(nums,0);
        return res;
    }  
};

> 解法二

class Solution {
private:
    void traversal(vector<int> &nums,int startdex){
       if(startdex > nums.size()) return;
       if(path.size() >= 2) res.emplace_back(path);
       vector<bool> used(200,false);
       for(int i = startdex; i < nums.size(); i++){
            if(used[nums[i] + 100]) continue;
            if((path.empty()) || (!path.empty() && path.back() <= nums[i])){
                used[nums[i] + 100] = true;
                path.emplace_back(nums[i]);
                traversal(nums,i+1);
                path.pop_back();
            }
            else continue;
       }
    }
public:
    vector<vector<int>> res;
    vector<int> path;
    vector<vector<int>> findSubsequences(vector<int>& nums) {
        res.clear();
        path.clear();
        traversal(nums,0);
        return res;
    }  
};

标签:nums,res,递增,vector,startdex,序列,path,491,size
From: https://www.cnblogs.com/lihaoxiang/p/17320984.html

相关文章

  • Python 利用正则表达式和filter函数 筛选序列(列表等)
    在 Python 中,序列类型包括字符串、列表、元组、集合和字典http://c.biancheng.net/view/4312.htmlPython内建的filter()函数用于过滤序列https://www.liaoxuefeng.com/wiki/1016959663602400/1017404530360000序列内逐个元素筛选filter并用list保存结果筛选的判断条件是re.match......
  • 第十四届蓝桥杯省赛C++B组--接龙序列
    接龙序列我们称序列中\(a_i\)的首位数字恰好是\(a_{i-1}\)的末尾数字,这样的序列叫做接龙序列,比如12233557,所有长度为1的整数序列都是接龙序列,现在给定一个长度为\(n\)的序列\(a\),请你计算最少从中删除多少个数,可以使得剩下的序列是接龙序列题解:\(DP\)根据题目我们可以转......
  • Jellyfish: 快速统计长序列中每个K-mers出现次数
      Jellyfish:快速统计长序列中每个K-mers出现次数  一个老工具,2011发表于Bioinformatics,目前引用1018次。因为需要用所以看了一下原文。Jellyfish,是此研究开发的,可以快速统计长序列中每个K-mers出现次数的软件。基于K-mers的应用很广,包括基因组组装、测序......
  • 二分法查找子序列
    判断子序列二分思路主要是对t进行预处理,用一个字典index将每个字符出现的索引位置按顺序存储下来intm=s.length(),n=t.length();vector<vector<int>>index(256,vector<int>());//先记下t中每个字符出现的位置for(inti=0;i<n;i++){charc=t[i];......
  • fastjson 1.2.24 反序列化漏洞(审计分析)
    环境JDK8u181Fastjson1.2.24POC跟进parse方法跟进到底层deserialze方法Poc中传入的dataSourceName:ldap://192.168.3.229:8084/vnSYPYwMs值这里实际对应setDataSourceName方法,调用此方法并传入ldap跟进setDataSourceName方法,这里只是简单赋值 步出......
  • 用 Go 剑指 Offer 31. 栈的压入、弹出序列 (辅助栈)
    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。示例1:输入:pushe......
  • oracel将序列值改为当前系统最大值方法
    --修改序列为表中最大值declareMax_IdNUMBER(10);Current_ValueNUMBER(10);BEGINSELECTmax(to_number(user_code))INTOMax_IdFROMF_USERINFOtwheret.user_code!='u0000000';loopSELECTS_USERCODE.NEXTVALINTOCurrent_ValueFROMdual;......
  • 动态规划04——300. 最长递增子序列
    300.最长递增子序列给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,7,101,18]输出:4解释:最长递......
  • day29| 491+46+47
    491.递增子序列 题目简述:给你一个整数数组nums,找出并返回所有该数组中不同的递增子序列,递增子序列中至少有两个元素。你可以按任意顺序返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。 思路: 关键在去重利用官方题解给......
  • 序列话ID的作用
    1、序列化ID的作用其实,这个序列化ID起着关键的作用,它决定着是否能够成功反序列化!简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比......