「代码随想录算法训练营」第二十二天 | 回溯算法 part4

news/2024/9/8 8:46:18/文章来源:https://www.cnblogs.com/frontpen/p/18326688

491. 非递减子序列

题目链接:https://leetcode.cn/problems/non-decreasing-subsequences/
题目难度:中等
文章讲解:https://programmercarl.com/0491.递增子序列.html
视频讲解:https://www.bilibili.com/video/BV1EG4y1h78v/
题目状态:有思路,借助 ChatGPT 通过

思路:

在之前代码的基础上,添加一个set<vector<int>>类型的全局变量,用来跟踪已添加的子序列,来避免重复子序列的存储。

代码:

class Solution {
public:vector<vector<int>> res;vector<int> vec;set<vector<int>> seen;void backtracking(vector<int> &nums, int startIdx) {if(vec.size() >= 2) {if(seen.find(vec) == seen.end()) {res.push_back(vec);seen.insert(vec);}}for(int i = startIdx; i < nums.size(); ++i) {if(vec.empty() || nums[i] >= vec.back()) {vec.push_back(nums[i]);backtracking(nums, i + 1);vec.pop_back();}}}vector<vector<int>> findSubsequences(vector<int>& nums) {backtracking(nums, 0);return res;}
};

46. 全排列

题目链接:https://leetcode.cn/problems/permutations/
题目难度:中等
文章讲解:https://programmercarl.com/0046.全排列.html
视频讲解:https://www.bilibili.com/video/BV19v4y1S79W/
题目状态:有思路,借助 ChatGPT 通过

思路:

定义一个全局变量vector<bool> isUsed,用来判断当前节点是否已经被回溯到了,若已经用过就直接跳过,之后使用回溯模板。

代码:

class Solution {
public:vector<vector<int>> res;vector<int> vec;vector<bool> isUsed;void backtracking(vector<int> &nums) {if(vec.size() == nums.size()) {res.push_back(vec);return;}for(int i = 0; i < nums.size(); ++i) {if(isUsed[i]) continue;vec.push_back(nums[i]);isUsed[i] = true;backtracking(nums);vec.pop_back();isUsed[i] = false;}}vector<vector<int>> permute(vector<int>& nums) {isUsed.resize(nums.size(), false);backtracking(nums);return res;}
};

47. 全排列II

题目链接:https://leetcode.cn/problems/permutations-ii/
题目难度:中等
文章讲解:https://programmercarl.com/0047.全排列II.html
视频讲解:https://www.bilibili.com/video/BV1R84y1i7Tm/
题目状态:有思路,通过

思路:

将上面两题结合一下,分别创建一个vector<bool>的全局变量来判断当前元素是否已经被使用,避免排列出来的单个结果中出现重复的元素;在定义一个set<vector<int>>的全局变量,来判断所有排列中是否出现了重复的排列方案。

代码:

class Solution {
public:vector<vector<int>> res;vector<int> vec;vector<bool> isUsed;set<vector<int>> seen;void backtracking(vector<int> &nums) {if(vec.size() == nums.size()) {if(seen.find(vec) == seen.end()) {res.push_back(vec);seen.insert(vec);}}for(int i = 0; i < nums.size(); ++i) {if(isUsed[i]) continue;vec.push_back(nums[i]);isUsed[i] = true;backtracking(nums);vec.pop_back();isUsed[i] = false;}}vector<vector<int>> permuteUnique(vector<int>& nums) {isUsed.resize(nums.size(), false);backtracking(nums);return res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/772518.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始搭建博客系列-终

结束,也是新的开始。结束,也是新的开始。 ‍ 不知不觉也写了接近 30 篇博客了,也帮助到了很多人,甚是欣慰。 本文就做一个小结吧 🎉 ‍ 搭建博客非一日之功 我从 2022 年 4 月开始搭建博客,每天/每周都抽出点时间搞,前前后后花了几个月时间,基本功能才算完成了,并且几…

进度报告9

(1)1.学习string和arraylist集合的使用2.案例练习

在python3.8虚拟环境 执行pip 安装Excel的库

1、在开始菜单 打开Anaconda prompt(anaconda3) 2、查看环境列表 3、进入虚拟环境 4、在虚拟换进下使用清华源安装读取excel的库 和写入excel的库 读取Excel文件的库:pip install xlrd -i https://pypi.tuna.tsinghua.edu.cn/simple 写入Excel文件的库:pip install xlwt …

51nod-基因匹配+luogu-【模板】最长公共子序列

https://www.luogu.com.cn/problem/P1439 https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338 以上两个都是特例,一个是每个元素不重复,一个是每个元素均有5个。正确性说明参考:https://www.luogu.com.cn/article/1bcs9052 由于一般…

大语言模型的Scaling Law:如何随着模型大小、训练数据和计算资源的增加而扩展

人工智能的世界正在经历一场革命,大型语言模型正处于这场革命的前沿,它们似乎每天都在变得更加强大。从BERT到GPT-3再到PaLM,这些AI巨头正在推动自然语言处理可能性的边界。但你有没有想过是什么推动了它们能力的飞速提升? 在这篇文章中,我们将介绍使这些模型运作的秘密武…

教你如何管理Linux网络,一招鲜吃遍天?!

01 准备工作 当前操作的虚拟机版本信息:CentOS8 当前操作的虚拟化软件:VMware workstation 由于虚拟化软件中有3种网络模式,我们这里选择使用NAT模式 提前查看虚拟机的网段信息是多少,方便我们后续配置网络能够有效使用在配置网络之前您需要了解一些基础知识: 在给Linux系…

使用iwctl连接无线网络

检查wifi模块驱动是否正确 ip addr #输出的信息查看是否 包含‘w’开头的网卡安装iwd这里使用iwd管理WiFi,主要原因是小巧,方便使用无需额外配置# 安装 apt install iwd # 设置开机启动 systemctl enable --now iwd # 查看无线网卡 iwctl device list# 扫描并获取无线网络 iw…

Hisiphp2.0.11的文件上传

php第二个复现漏洞,危险函数PclZip()侵权声明 本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。 如果您是版权持有人,并且认为您的作品被侵犯,请通过以…

直播系统,利用关联规则实现推荐算法

直播系统,利用关联规则实现推荐算法关联规则是以规则的方式呈现直播系统之间的相关性:关联规则(Association Rules)是反映一个事物与其他事物之间的相互依存性和关联性,是数据挖掘的一个重要技术,用于从大量数据中挖掘出有价值的数据项之间的相关关系。关联规则的经典例子是…

项目经理的新伙伴:性能出众的进度管理软件

国内外主流的10款项目进度管理软件对比:PingCode、Worktile、Teambition、石墨文档(Shimo Docs)、Tower、有道云协作、Monday.com、Asana、Airtable、Notion。在管理任何项目时,及时准确地跟踪进度是至关重要的,但在琳琅满目的项目管理软件中找到最合适的一款却常常令人头…

mysqldump: Got error: 1066: Not unique table/alias: act_evt_log when using LOCK TABLES

先说解决办法:执行下面语句 mysqldump -ushooter -p123123 --single-transaction fd>fd.sqllower_case_table_names区分大小写设置 注意:此参数不可以动态修改,必须重启数据库 1 2 3 41、参数含义: lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候…

解决--SecureCRT乱码问题

SecureCRT是一个商业终端连接工具,支持多种自定义设置。默认设置下,通过SecureCRT连接SSH服务器可能出现中文乱码的情况。这是由于SecureCRT字符编码与服务器的字符编码不一致造成的。解决:将SecureCRT字符编码设置成与服务器的字符编码一致即可,将SecureCRT字符编码设置成…