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

非递减子序列(力扣491)

这道题的难点依旧是去重,但是与之前做过的子集类问题的区别就是,这里是求子序列,意味着我们不能先给数组中的元素排序。因为子序列中的元素的相对位置跟原数组中的相对位置是一样的,如果我们改变数组中元素的顺序,子序列也会发生改变。那么我们就不能使用之前用到过的去重方法,此题需要使用道哈希表,这样就可以实现去重的功能。哈希表的使用我们之前也练过不少题,这里就不详细说明了,忘记的同学可以看一下之前的博客。需要注意的是,我们需要在每一层递归中都定义一个新的哈希表,原因在于:往下递归子序列可以取重复的元素,但是在同一层递归的for循环中遍历时需要跳过重复的元素。其他的点比较好懂,大家可以结合我下面的代码及详细注释理解此题。

代码及详细注释如下:

class Solution {
public:vector<int> path;vector<vector<int>> result;void backtracking(vector<int>& nums,int start){//注意题目说了至少两个元素if(path.size() >= 2){result.push_back(path);}    //终止条件if(start >= nums.size()){return;}//每一层递归都需要定义一个新的哈希表unordered_set<int> uset;for(int i = start;i < nums.size();i++){//去重操作if((path.empty() != 1 && nums[i] < path.back()) || uset.find(nums[i]) != uset.end()){continue;}uset.insert(nums[i]);path.push_back(nums[i]);backtracking(nums,i + 1);path.pop_back();//注意哈希表并不需要回溯,因为每一层都有专门的哈希表来负责去重}}vector<vector<int>> findSubsequences(vector<int>& nums) {result.clear();path.clear();backtracking(nums,0);return result;}
};

http://www.lryc.cn/news/534081.html

相关文章:

  • 网站快速收录策略:提升爬虫抓取效率
  • 系统思考—自我超越
  • 苍穹外卖-菜品分页查询
  • 子集II(力扣90)
  • user、assistant、system三大角色在大语言模型中的作用(通俗解释)
  • LeetCode 3444.使数组包含目标值倍数的最小增量
  • 2月9日星期日今日早报简报微语报早读
  • MOSSE目标跟踪算法详解
  • 生成式聊天机器人 -- 基于Pytorch + Global Attention + 双向 GRU 实现的SeqToSeq模型 -- 下
  • 本地部署的DeepSeek-R1-32B与DeepSeek-R1-7B模型效果对比
  • AWS Fargate
  • 表单与交互:HTML表单标签全面解析
  • 【电机控制器】STC8H1K芯片——低功耗
  • win10 llamafactory模型微调相关① || Ollama运行微调模型
  • SMU寒假训练周报
  • 高并发读多写少场景下的高效键查询与顺序统计的方案思路
  • Android Studio 配置 Gerrit Code Review
  • html为<td>添加标注文本
  • (done) openMP学习 (Day10: Tasks 原语)
  • 力扣-字符串-28 找出字符串中第一个匹配项的下标
  • linux 基础知识点之工作队列workqueue
  • C++蓝桥杯基础篇(二)
  • 【Android—OpenCV实战】实现霍夫圆检测针对沙盘交通灯信号检测
  • WPS如何接入DeepSeek(通过JS宏调用)
  • 图论——环检测
  • Chapter2:C#基本数据类型
  • kafka服务端之控制器
  • Unity笔试常考
  • 移植BOA服务器到GEC2440开发板
  • WPS如何接入DeepSeek(通过第三方工具)