LeetCode 491. 递增子序列(回溯+判重剪枝)
发布日期:2021-07-01 03:25:41
浏览次数:2
分类:技术文章
本文共 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
转载地址:https://michael.blog.csdn.net/article/details/106157529 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月17日 09时19分23秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
头文件中 #ifndef---#define---#endif的作用
2019-05-01
分析Linux内核启动过程:从start_kernel到init
2019-05-01
系统调用过程的理解
2019-05-01
Ant内置任务之whichresource
2019-05-01
Ant内置任务之symlink
2019-05-01
jface databinding:部分实现POJO对象的监测
2019-05-01
深入理解python--线程、进程与协程(1)
2019-05-01
Java--流重点总结初稿
2019-05-01
Html2Servlet--Html代码转换为Servlet小程序
2019-05-01
HTTP认证方式
2019-05-01
图书商城:分类模块
2019-05-01
图书商城:订单模块
2019-05-01
开源全能播放器Vitamio的使用
2019-05-01
使用ViewPager加载页面出现空白
2019-05-01
ImageView scaleType
2019-05-01
RecyclerView notifyItem闪屏问题
2019-05-01
dubbo学习笔记 十一 dubbo-rpc之模块
2019-05-01
motan学习笔记 五 opentracing学习入门
2019-05-01