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

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

示例 1:
输入:nums = [4,6,7,7]
输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]

示例 2:
输入:nums = [4,4,3,2,1]
输出:[[4,4]]

提示:
1 <= nums.length <= 15
-100 <= nums[i] <= 100

这道题大眼一看就知道是集合类的题目,但是并不是要每一个节点,节点需要满足长度大于等于2,
而且,这里也需要去重的操作,但是这个去重就不能像解析里说的那样了,因为那种去重的前提是需要排序,这道题如果排序了题意就改变了,所以在这里需要用到set来对每一层重复的去重,
详细说就是把每一层的数据依次存入set中,如果发现和之前的有重复,就直接continue跳过就可以了;

这种去重方式针对的就是原集合无法排序的情况,知道这种情况怎么办就行;详细注释在代码中;
代码如下:

class Solution {public:vector<vector<int>> ans;vector<int> path;void backTracking(vector<int>& nums, int start) {//递增序列至少两个元素,所以我们只要有两个元素的节点if (path.size() > 1) {ans.push_back(path);}//这个set目的是为了去重,对每一层相等的去重unordered_set<int> used;for (int i = start; i < nums.size(); ++i) {//子序列需要满足两个条件//1,是递增的//2,该层元素不能重复出现if ((!path.empty() && nums[i] < path.back()) || (used.find(nums[i]) != used.end())) {continue;}//这里used不用回溯因为它针对的是每一层,通过递归每前进一层都会生成新的usedused.insert(nums[i]);path.push_back(nums[i]);backTracking(nums, i + 1);//递归path.pop_back();//回溯}}vector<vector<int>> findSubsequences(vector<int>& nums) {backTracking(nums, 0);return ans;}
};

491. 递增子序列(回溯算法)相关推荐

  1. Suzy加油吧 Day 29 | 回溯算法进行中:491. 递增子序列,46 全排列,47 全排列2

    491. 递增子序列(新 & 难) 呜呜呜呜呜 题目 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组 ...

  2. LeetCode 491. 递增子序列【数组,回溯算法,哈希表去重】

    491. 递增子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组中可能含有重复元素,如出现两个整数相等, ...

  3. 【ACM/webank】#491.递增子序列(使用HashSet来记录并防止重复子序列)

    #491.递增子序列 1 回溯 昨晚webank考到这道题 1 回溯 https://programmercarl.com/0491.%E9%80%92%E5%A2%

  4. leetcode:491. 递增子序列、17. 电话号码的字母组合、31. 分割回文串、93. 复原 IP 地址(JavaScript)

    文章目录 491. 递增子序列 分析 去重 如何保证递增呢? 17. 电话号码的字母组合 思路: 单层递归逻辑 递归终止条件 完整代码 另一种写法 31. 分割回文串 思路:分析题目本题可分为两步 9 ...

  5. 491. 递增子序列

    链接:491. 递增子序列 题解:https://leetcode-cn.com/problems/increasing-subsequences/solution/liang-chong-dfshu ...

  6. Java实现 LeetCode 491递增子序列

    491. 递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, ...

  7. LeetCode 491. 递增子序列(回溯+判重剪枝)

    1. 题目 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7] ...

  8. leetcode 491. 递增子序列 思考分析

    题目 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 说明: 给定数组的长度不会超过15. 数组中的整数范围是 [-100,100]. 给定数组中可能包含重复数字 ...

  9. 最长递增子序列_python_算法与数据结构

    周末了,实验室的网速还是不给力啊,不知道doctors都在干啥,,,最近都在做算法作业,昨天晚上看了一部电影<将爱进行到底>,刚打开电影没多久就听到了很熟悉的旋律,让我很是惊讶,这竟然就是 ...

最新文章

  1. 寻找阿姆斯特朗数c语言程序,C程序检查阿姆斯特朗数
  2. 指数基金日涨跌幅python_看懂巴菲特推荐的指数基金定投,Python验证
  3. 《ACM国际大学生程序设计竞赛题解Ⅰ》——模拟题
  4. CodeForces - 863F Almost Permutation(最小费用最大流+思维建边)
  5. Java ObjectStreamField getOffset()方法与示例
  6. python利用缩进写模块_Python之缩进块
  7. python组合函数_Python---函数---参数组合
  8. scheme http https 区别 tls_HTTPS、HTTP、TLS/SSL工作及握手原理、PKI/CA密钥体系
  9. java 拦截器 排除_java – Spring MVC Interceptor排除HTTP方法的路径
  10. openssl中算法的组织方式
  11. 数据库课程设计(学校运动会管理系统)2021-9-21
  12. Visual Studio 各版本下载合集vs2005下载+vs2008下载+vs2010下载+vs2012下载
  13. 测试日照强度的软件,日照分析软件FastSUN - 飞时达软件
  14. python实现具有删除空格、英文标点替换、英文单词大写等功能的文字排版工具
  15. 【数据结构教程 李春葆】上机实验--第一章实验题
  16. /admin/login.php,app/admin/controller/Login.php · 静水流深/wotuoquan - Gitee.com
  17. 【慕课笔记】第一章 JAVA初体验 第3节 使用记事本编写JAVA程序
  18. 在Linux系统中增加一块SCSI硬盘,重新启动计算机。
  19. 计算机输入法切换用户,电脑的输入法切换不了怎么办,教您如何解决电脑系统输入法...
  20. 公务员考试计算机专业类别,专业!公务员专业类别划分

热门文章

  1. 计算机408试题2014,2014年考研计算机统考408真题
  2. 什么叫“碳达峰、碳中和”?一副漫画看明白
  3. 数据中心战略的三个真相
  4. python series转int_分享丨推荐一个 Python 手绘图形库
  5. phpmyadmin忘记mysql密码_忘记phpmyadmin登录密码怎么办
  6. Paper:《A Few Useful Things to Know About Machine Learning—关于机器学习的一些有用的知识》翻译与解读
  7. ML之ECS:利用ECS的PAI进行傻瓜式操作机器学习的算法
  8. Py之dominate:python的dominate库的简介、安装、使用方法之详细攻略
  9. Python中单线程、多线程与多进程的效率对比实验
  10. Excel批量转csv格式