代码随想录第28天|回溯算法

491. 非递减子序列

在这里插入图片描述
思路:

  • 不可以排序, 否则会改变元素的顺序
  • 对收获的结果有要求, num.size() >= 2, 且 num[i - 1] < num[i]
  • 需要进行去重, 不能使用排序后的方法去重
  • 每一层可用 unordered_set 去重
  • 组合问题, for 遍历需要标记起始位置

bug:

  • 一定要先判断元素是否重复, 再将元素插入
    请添加图片描述
//正确步骤
if (used.find(nums[i]) != used.end()) {continue;
} else if (res_tem.empty()) { // 重复元素res_tem.push_back(nums[i]);
} else if (res_tem.back() > nums[i]) { // 非递增continue;
} else {res_tem.push_back(nums[i]);
}//错误步骤
//当res_tem为空时, 会将重复元素也添加, 一定需要先判断元素是否有使用
if (res_tem.size() == 0) { res_tem.push_back(nums[i]);
} else if (used.find(nums[i]) != used.end()) { //重复元素continue;
} else if (!(res_tem.back() <= nums[i])) {  //非递增continue;
} else {res_tem.push_back(nums[i]);
}
class Solution {
public:vector<vector<int>> res;vector<int> res_tem;void myoperator(vector<int>& nums, int index) {if (res_tem.size() >= 2) {res.push_back(res_tem);}unordered_set<int> used;for (int i = index; i < nums.size(); i++) {if (used.find(nums[i]) != used.end()) {continue;} else if (res_tem.empty()) { // 重复元素res_tem.push_back(nums[i]);} else if (res_tem.back() > nums[i]) { // 非递增continue;} else {res_tem.push_back(nums[i]);}// 等效操作// if (!res_tem.empty() && nums[i] < res_tem.back()) {//     continue;// }// if (used.find(nums[i]) != used.end()) {//     continue;// }// res_tem.push_back(nums[i]);used.insert(nums[i]);myoperator(nums, i + 1);res_tem.pop_back();}}vector<vector<int>> findSubsequences(vector<int>& nums) {myoperator(nums, 0);return res;}
};

46.全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
在这里插入图片描述
思路:

  • 不能使用index来跳过元素, 因为与顺序有关, 所以遍历从 i = 0 开始
  • 每个元素都要遍历, 可以使用 used 数组去重
  • 无法用 unordered_set 去重, 每层树枝都有相互关联, 不是去除重复数字操作

请添加图片描述

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

47. 全排列 II

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列
在这里插入图片描述
请添加图片描述
思路:

  • 取叶子节点, 中间需要去除, 相同数层之间不能用同样的数值
  • 排列则需要从0开始, 使用used标记使用过的元素
class Solution {
public:vector<vector<int>> res;vector<int> res_tem;vector<bool> flag;void myoperator(vector<int>& nums) {if (res_tem.size() == nums.size()) {res.push_back(res_tem);return;}unordered_set<int> used;for (int i = 0; i < nums.size(); i++) {if (used.find(nums[i]) != used.end()) {continue;}if (flag[i] == true) {continue;}flag[i] = true;used.insert(nums[i]);res_tem.push_back(nums[i]);myoperator(nums);flag[i] = false;res_tem.pop_back();}}vector<vector<int>> permuteUnique(vector<int>& nums) {flag = vector<bool>(nums.size(), false);myoperator(nums);return res;}
};

51. N 皇后
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
在这里插入图片描述
参考
请添加图片描述


37. 解数独
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考
请添加图片描述

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

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

相关文章

使用CAPL创建系统变量之sysDefineNamespace

目录 0 前言 1 使用CAPL创建系统变量 0 前言 最近在项目中发现可以通过CAPL来创建系统变量&#xff0c;这样方法在一定程度上提高了代码的统一性和测试的便利性。想要加入HIL自动化测试群的小伙伴欢迎评论区留言或私信&#xff0c;让我们一起进步&#xff01; 1 使用CAPL创建…

染发膏粪大肠菌群检测 化妆品毒理学检测 功效测试

染发膏中粪大肠菌群的检测 染发膏中的粪大肠菌群检测是为了确保产品的卫生安全&#xff0c;因为粪大肠菌群通常存在于动物的肠道中&#xff0c;它们的存在可能表明产品受到了外部环境的污染。根据国家标准GB/T 7918.3-1987&#xff0c;对化妆品中粪大肠菌群的检测方法进行了规范…

【html】爱心跳动动画:CSS魔法背后的故事

效果展示&#xff1a; 代码介绍&#xff1a; 爱心跳动动画&#xff1a;CSS魔法背后的故事 在前端开发中&#xff0c;CSS不仅仅是一种用于控制网页样式的工具&#xff0c;它也是一种表达创意和想象力的艺术手段。今天&#xff0c;我要为大家介绍一段使用CSS实现的爱心跳动动画…

【bug】配置SpringCloudAlibaba AI的maven依赖问题

问题描述 尝鲜alibaba的ai模块&#xff0c;maven依赖一直报找不到包&#xff0c;报错如下 Unresolved dependency: org.springframework.ai:spring-ai-core:jar:0.8.1原因分析&#xff1a; 由于是按照官方文档配置的&#xff0c;所以检查了很多遍maven配置&#xff0c;加上去…

408上岸关键正确的四门课复习顺序

我个人认为最舒服的学习408的顺序是&#xff1a; 数据结构&#xff0c;操作系统&#xff0c;计算机组成原理&#xff0c;计算机网络 下面我来说说为什么要这么安排复习&#xff1a; 因为首先数据结构是基础&#xff0c;学好数据结构有利于理解操作系统中的一些算法&#xff0c;…

函数模板与类模板深入解析及实例

目录 函数模板 类模板 类模板成员函数的实例化 类模板的静态成员 全局特化与成员特化 缺省模板参数与数值形式的模板参数 结论 函数模板 函数模板允许我们编写适用于多种数据类型的通用函数。以下是函数模板的定义和使用示例&#xff1a; template <typename T>…

【Docker】——安装镜像和创建容器,详解镜像和Dockerfile

前言 在此记录一下docker的镜像和容器的相关注意事项 前提条件&#xff1a;已安装Docker、显卡驱动等基础配置 1. 安装镜像 网上有太多的教程&#xff0c;但是都没说如何下载官方的镜像&#xff0c;在这里记录一下&#xff0c;使用docker安装官方的镜像 Docker Hub的官方链…

mke2fs -- 比mkfs.ext4艺术成分更高

mke2fs 介绍 mke2fs 是一个用于创建 ext2/ext3/ext4 文件系统的工具&#xff0c;是 mkfs.ext2, mkfs.ext3, mkfs.ext4 的底层工具。它提供了丰富的选项和参数&#xff0c;可以对文件系统进行详细的配置和优化。下面是 mke2fs 的详细讲解&#xff0c;包括其主要功能、常用选项及…

如何在MobaXterm上创建以及删除自己的用户和目录?

一、创建用户的两种命令 adduser和useradd命令在Linux系统中用于创建新的用户账户&#xff0c;但它们之间存在一些关键的区别&#xff0c;主要涉及它们的交互性和默认行为&#xff1a; sudo adduser newuser sudo useradd newuser 交互性: adduser: 这个命令通常提供更多的…

内外网映射访问内网服务器

如果本地有公网ip&#xff0c;比如连接的宽带有公网ip&#xff0c;可以直接通过路由配置转发就行了&#xff0c;如果本地没有公网ip&#xff0c;那就需要通过下面这种方式来访问内网服务器了。 1&#xff1a;首先内网服务器需要连接外网&#xff0c;可以通过网线或者WiFi都可以…

小林图解系统-二.硬件结构 2.4CPU缓存一致性

CPU Cache的数据写入 CPU和内存的访问性能越差越大&#xff0c;于是在CPU内部嵌入CPU Cache(高速缓存)。 CPU Cache由Cache Line组成&#xff0c;Cache Line由头标志Tag数据块Data Block组成。 如果数据写入Cache&#xff0c;内存和Cache相对应的数据将不同&#xff0c;需要…

Redis-五种数据结构之列表(ziplist、quicklist)

列表 文章目录 列表压缩列表-ziplistziplist 定义级联更新 快速列表-quicklistquicklistNode 定义quicklist 定义quicklist常用操作其他操作quicklist 相对于普通链表优点quick应用场景在redis 中使用quicklist 列表数据类型可以存储一组按插入顺序排序的字符串&#xff0c;他很…

昇思大模型学习·第一天

mindspore快速入门回顾 导入mindspore包 处理数据集 下载mnist数据集进行数据集预处理 MnistDataset()方法train_dataset.get_col_names() 打印列名信息使用create_tuple_iterator 或create_dict_iterator对数据集进行迭代访问 网络构建 mindspore.nn: 构建所有网络的基类用…

Linux搭建Minio单机环境

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Linux搭建Minio单机环境 ⏱️ 创作时间&#xff1a; 2024年06月19日 目…

Linux网络命令:网络速度测试工具 speedtest-cli 详解

目录 一、概述 二、安装 speedtest-cli 1、在基于 Debian 的系统上安装 2、在基于 Red Hat 的系统上安装 三、命令语法 1、基本命令语法 2、查看帮助 3、常用选项 四、 speedtest-cli使用示例 1. 基本测试 2. 列出所有可用的服务器 3. 指定服务器进行测试 …

C语言—数据在内存中的存储

1.整数在内存中的存储 文章回顾&#xff08;C语言—操作符详解&#xff09; 整数的2进制表示方式有三种&#xff0c;即原码、反码和补码。 有符号的整数&#xff0c;三种表示方式均有符号位和数值位两部分&#xff0c;符号位都是用0表示“正”&#xff0c;用1表示“负”&…

数据库 | 试卷四

1.数据库系统的特点是 数据共享、减少数据冗余、数据独立、避免了数据不一致和加强了数据保护 2.关系模型的数据结构是二维表结构 3.聚簇索引 cluster index 4. 这里B&#xff0c;C都是主属性&#xff0c;所以B->C不是非主属性对码的部分函数依赖 候选键&#xff08;AC&a…

复利(Compound Interest)是什么?中英双语介绍

中文版 复利&#xff08;Compound Interest&#xff09;深入介绍 1. 什么是复利&#xff1f; 复利&#xff08;Compound Interest&#xff09;&#xff0c;也称为“利滚利”&#xff0c;是指利息不仅会根据本金计算&#xff0c;还会根据已经累积的利息计算。这种方式可以让投…

极端天气频繁之下,新能源风力发电风机巡检建设智能化超高清化趋势明显

这个6月&#xff0c;中央气象台连发7天高温预警&#xff0c;全国多地气温超40度&#xff0c;全国出现40℃以上高温的范围持续增加&#xff0c;6个国家站日最高气温突破6月极值。极端热浪不仅冲向中国&#xff0c;几乎北半球的所有地区&#xff0c;也同样被这股热浪影响。 随着…

LabVIEW共享变量

共享变量简介 LabVIEW​为​创建​分布​式​应用使用​共享​变量​可以简化​此类​应用的编程。​ 借助​共享​变量&#xff0c;​您​可以​在​同​一个​程序​框​图​的​不同​循环​之间​或者网络上​的​不同VI之间​共享​数据。与LabVIEW中的许多​其他数据​共…