博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 491. 递增子序列(回溯+判重剪枝)
阅读量:2007 次
发布时间:2019-04-28

本文共 1103 字,大约阅读时间需要 3 分钟。

1. 题目

给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2

示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明:给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/increasing-subsequences
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 类似题目

  • 这里由于是无序的,可能存在相同元素,但是不连续,在一次dfs的for之前加一个哈希set

  • set中存在的元素再次出现时,跳过,如下例子中的1

[1,2,3,4,5,6,7,8,9,10,1,1,1,1,1]
[1,2,1,1,1]结果为:[[1,2],[1,1],[1,1,1],[1,1,1,1]],可以理解一下
class Solution {
vector
> ans; vector
path;public: vector
> findSubsequences(vector
& nums) { dfs(0, nums); return ans; } void dfs(int i, vector
&nums) { unordered_set
s;//一次dfs中的判重 for( ; i < nums.size(); ++i) { if(s.count(nums[i]))//再次出现同样的值,跳过 continue; if(path.empty() || path.back() <= nums[i]) { path.push_back(nums[i]); s.insert(nums[i]); if(path.size() > 1) ans.push_back(path); dfs(i+1, nums); path.pop_back(); } } }};

80 ms 23.1 MB

你可能感兴趣的文章
source insight快捷键及使用技巧
查看>>
映 射 ALT 键
查看>>
vim使用快捷键F4生成文件头注释、F5生成main函数模板、F6生成.h文件框架模板
查看>>
SERVICE_UNAVAILABLE/1/state not recovered / initialized
查看>>
用python解析html
查看>>
OV5620的视频驱动
查看>>
C++中两个类交叉定义或递归定义的解决办法
查看>>
ECharts is not Loaded解决方案
查看>>
echarts切换tab时,第一个图表显示,第二个图表不显示的解决办法
查看>>
记一次Hive 行转列 引起的GC overhead limit exceeded
查看>>
OpenGL ES八 - 交叉存取顶点数据
查看>>
crontab定时任务写法
查看>>
nginx: [emerg] unknown directive "if($remote_addr" in /usr/local/tools/nginx/conf/nginx.conf:57
查看>>
module pip has no attribute main问题解决
查看>>
LeetCode 134.Gas Station (加油站)
查看>>
Python之命名元组 (namedtuple)
查看>>
使用libpcap过滤arp
查看>>
在VC环境中调试跟踪变量
查看>>
一个简单而又灵活的IOCP模块——完成端口通讯服务器(IOCP Socket Server)设计(四)
查看>>
[转帖]Robots.txt指南
查看>>