491. 递增子序列(回溯算法)
给你一个整数数组 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. 递增子序列(回溯算法)相关推荐
- Suzy加油吧 Day 29 | 回溯算法进行中:491. 递增子序列,46 全排列,47 全排列2
491. 递增子序列(新 & 难) 呜呜呜呜呜 题目 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组 ...
- LeetCode 491. 递增子序列【数组,回溯算法,哈希表去重】
491. 递增子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组中可能含有重复元素,如出现两个整数相等, ...
- 【ACM/webank】#491.递增子序列(使用HashSet来记录并防止重复子序列)
#491.递增子序列 1 回溯 昨晚webank考到这道题 1 回溯 https://programmercarl.com/0491.%E9%80%92%E5%A2%
- leetcode:491. 递增子序列、17. 电话号码的字母组合、31. 分割回文串、93. 复原 IP 地址(JavaScript)
文章目录 491. 递增子序列 分析 去重 如何保证递增呢? 17. 电话号码的字母组合 思路: 单层递归逻辑 递归终止条件 完整代码 另一种写法 31. 分割回文串 思路:分析题目本题可分为两步 9 ...
- 491. 递增子序列
链接:491. 递增子序列 题解:https://leetcode-cn.com/problems/increasing-subsequences/solution/liang-chong-dfshu ...
- Java实现 LeetCode 491递增子序列
491. 递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, ...
- LeetCode 491. 递增子序列(回溯+判重剪枝)
1. 题目 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7] ...
- leetcode 491. 递增子序列 思考分析
题目 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 说明: 给定数组的长度不会超过15. 数组中的整数范围是 [-100,100]. 给定数组中可能包含重复数字 ...
- 最长递增子序列_python_算法与数据结构
周末了,实验室的网速还是不给力啊,不知道doctors都在干啥,,,最近都在做算法作业,昨天晚上看了一部电影<将爱进行到底>,刚打开电影没多久就听到了很熟悉的旋律,让我很是惊讶,这竟然就是 ...
最新文章
- 寻找阿姆斯特朗数c语言程序,C程序检查阿姆斯特朗数
- 指数基金日涨跌幅python_看懂巴菲特推荐的指数基金定投,Python验证
- 《ACM国际大学生程序设计竞赛题解Ⅰ》——模拟题
- CodeForces - 863F Almost Permutation(最小费用最大流+思维建边)
- Java ObjectStreamField getOffset()方法与示例
- python利用缩进写模块_Python之缩进块
- python组合函数_Python---函数---参数组合
- scheme http https 区别 tls_HTTPS、HTTP、TLS/SSL工作及握手原理、PKI/CA密钥体系
- java 拦截器 排除_java – Spring MVC Interceptor排除HTTP方法的路径
- openssl中算法的组织方式
- 数据库课程设计(学校运动会管理系统)2021-9-21
- Visual Studio 各版本下载合集vs2005下载+vs2008下载+vs2010下载+vs2012下载
- 测试日照强度的软件,日照分析软件FastSUN - 飞时达软件
- python实现具有删除空格、英文标点替换、英文单词大写等功能的文字排版工具
- 【数据结构教程 李春葆】上机实验--第一章实验题
- /admin/login.php,app/admin/controller/Login.php · 静水流深/wotuoquan - Gitee.com
- 【慕课笔记】第一章 JAVA初体验 第3节 使用记事本编写JAVA程序
- 在Linux系统中增加一块SCSI硬盘,重新启动计算机。
- 计算机输入法切换用户,电脑的输入法切换不了怎么办,教您如何解决电脑系统输入法...
- 公务员考试计算机专业类别,专业!公务员专业类别划分
热门文章
- 计算机408试题2014,2014年考研计算机统考408真题
- 什么叫“碳达峰、碳中和”?一副漫画看明白
- 数据中心战略的三个真相
- python series转int_分享丨推荐一个 Python 手绘图形库
- phpmyadmin忘记mysql密码_忘记phpmyadmin登录密码怎么办
- Paper:《A Few Useful Things to Know About Machine Learning—关于机器学习的一些有用的知识》翻译与解读
- ML之ECS:利用ECS的PAI进行傻瓜式操作机器学习的算法
- Py之dominate:python的dominate库的简介、安装、使用方法之详细攻略
- Python中单线程、多线程与多进程的效率对比实验
- Excel批量转csv格式