当前位置: 首页 > news >正文

10非递减子序列 回溯

491. 非递减子序列

中等

相关标签

premium lock icon相关企业

给你一个整数数组 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

class Solution {// 存储所有【原始结果】(可能有重复)vector<vector<int>> result;// 存储当前正在拼接的一条子序列vector<int> path;// 回溯函数:nums=原数组,startIndex=本轮从哪个下标开始选void backtracking(vector<int>& nums, int startIndex) {// 递归终止条件之一:// 当前子序列长度 >=2,符合题目要求,加入结果集if (path.size() >= 2) {result.push_back(path); //注意这里不能return,还需要向后继续收结果呢}if(startIndex>=nums.size()) return;// 循环:从 startIndex 开始,逐个选数字for (int i = startIndex; i < nums.size(); i++) {// 剪枝:必须保证【非递减】// 如果 path 不为空,且当前数字 < path 最后一个数 → 不满足递增,直接跳过if (!path.empty() && nums[i] < path.back()) {continue;}// 1. 选择:把当前数字放进子序列path.push_back(nums[i]);// 2. 递归:继续选下一个数字(不能回头,所以 i+1)backtracking(nums, i + 1);// 3. 回溯:撤销选择,弹出最后一个数,尝试下一种可能path.pop_back();}}
public:vector<vector<int>> findSubsequences(vector<int>& nums) {// 清空,避免多个测试用例数据污染result.clear();path.clear();   backtracking(nums, 0);// ---------------- 去重逻辑 ----------------// 把有重复的 result 放入 set,自动去重set<vector<int>> mySet(result.begin(), result.end());// 把去重后的 set 转回 vector 返回vector<vector<int>> finalResult(mySet.begin(), mySet.end());return finalResult;}
};
  • 本题绝对不可以排序,序列顺序会变

  • 本题不需要排序也可以用set去重,因为本题要求一定是非递减的子序列,前面的组合问题不排序可能出现选了1 4 7之后后面出现 4 1 7的情况,但是本题不会,非递增直接剪枝掉了

  • 本题只能用 unordered_set used 本层去重(稍微复杂一点,暂时懒得掌握)

    我现在用的最后 set<vector> 去重完全可以用,只是慢一点

    i>startIndex && nums[i]==nums[i-1] → 只能用于【排序后】的去重,本题没有排序,绝对不能用这种方法去重

http://www.jsqmd.com/news/872519/

相关文章:

  • 阅读APP书源失效如何应对?三步策略助你重获海量阅读资源
  • 如何让管理者说话算话、做事靠谱?——必备执行法则-佛山鼎策创局破局增长咨询
  • 处理跨时区订单与日志?LocalDateTime时区转换与序列化的避坑指南
  • 2026兰州黄金回收市场权威数据分析全网舆情研判上门实地背调315认证正规老店指南 - 鑫顺黄金回收
  • 别再只用鼠标了!eNSP这20个快捷键,让你模拟实验效率翻倍(附常用场景清单)
  • 2026年外墙防水品牌推荐排行榜:别墅、飘窗、卧室、地下室、阳台外、房屋、厂房、宿、 窗台等外墙防水优质之选! - 资讯纵览
  • TestSprite 3.0 深度技术解析:端到端 AI 自动化测试架构、核心能力与底层实现原理
  • 手把手教你用STC15单片机驱动DS18B20:从数据手册到稳定测温(含OneWire时序详解)
  • 5分钟上手B站成分检测器:让评论区用户身份一目了然的神器
  • 暗黑2存档修改终极指南:5分钟学会免费d2s文件编辑器
  • 2026年济南黄金回收安心之选排名:从资质核验到交易完成,5家零风险渠道 - 生活测评君
  • 树莓派Linux命令行实战指南:从基础操作到系统运维
  • PX4飞控IMU频率上不去?手把手教你用QGC和SD卡配置文件,轻松提到173Hz
  • 告别低效手动:用Amass的intel命令挖掘目标企业所有关联域名(实战演示)
  • 物流调度还是靠调度员经验?2026年AI智能体驱动供应链重构全解析
  • Burp Suite实战进阶:从抓包工具到Web安全认知框架
  • GEO时代,如何让AI把你的网站当成 “标准答案“?
  • 告别手动配IP!用STM32CubeMX快速实现LwIP DHCP客户端,连接路由器即插即用
  • 2026年宜昌净水器推荐:靠谱品牌排名与选购指南 - 资讯纵览
  • 初创团队人力资源管理:避开这5大坑,轻松招人留人-佛山鼎策创局破局增长咨询
  • 别再死记硬背了!用PyTorch的nn.GRU()处理时序数据,这5个参数配置技巧让你事半功倍
  • GEO 和 Google SEO 的关系:AI 搜索时代,SEO 真的变了吗?
  • 手把手复现MedViT:从PyTorch代码解读到MedMNISTv2数据集实战,附PMC增强技巧
  • HAJIMI Gemini API代理:智能密钥管理与高可用AI服务网关
  • 2026 高炉炼铁智能化技术全景与演进路径~系列文章03:高炉工业数据治理标准化与全生命周期血缘体系
  • 专用 ASIC 推理云平台:面向通用计算场景的 GPU 训练架构替代方案深度技术解析
  • 2026权威榜单!农村空气能取暖品牌推荐|不同场景怎么选,一篇给你说透! - 匠言榜单
  • 别再只会画基础网络图了!用Cytoscape插件Cytohubba给你的蛋白质互作网络做个深度分析
  • UE5 Paper2D像素对齐核心:BitmapUtils.h原理与实战
  • 2026年实体门店获客新变局:当短视频矩阵成为“必修课“,哪套系统真正能落地?