代码随想录算法训练营第30天 | 回溯算法总结、332.重新安排行程、51. N皇后、37. 解数独

news/2024/9/22 21:05:41/

代码随想录算法训练营第30天 | 回溯算法总结

  • 回溯算法模板
  • 组合问题
  • 切割问题
  • 子集问题
  • 排列问题
  • 去重问题

回溯算法模板

void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
}

组合问题

1.与for循环相比,回溯法优势在于可以用递归控制for循环嵌套的数量
2.for循环横向遍历,递归纵向遍历。for循环参数i取值范围控制剩余集合,递归返回条件控制树形图深度。
3.优化回溯算法:剪枝,常用:在for循环终点进行剪枝或根据题意如总和进行剪枝。
4.什么时候需要startIndex?一个集合求组合。
如果是多个集合取组合,各个集合之间相互不影响,则不需要startIndex。
5.树枝去重与树层去重:结果集不可有重复,使用树层去重;每个结果不可有重复,使用树枝去重。
6.注意输入异常的情况。

切割问题

1.本质:转成组合问题,切割线使用startIndex,子串范围为nums[startIndex,i]

子集问题

1.子集问题收集所有节点的结果,组合问题收集叶子节点的结果。

result.add(new ArrayList<>(path));//收集子集,要放在终止添加的上面,否则会漏掉结果。
if(startIndex>=nums.length()){
return;
}

2.子集问题去重依然采用组合问题去重的那两个思路。要注意,去重方式目前了解的一个是对数组进行排序之后使用used数组,另一种方式是使用hashset。两者区别第二种更普遍,第一种只能用于原数组可以被重新排序的情况。
3.递增子序列:子集问题一定要排序,画树形图即可了解。

排列问题

1.不需要使用startIndex,每个for循环都是从0开始。
2.使用used数组记录path都放了什么元素。

去重问题

1.使用hashset效率更低,因为哈希映射更费时间。


http://www.ppmy.cn/news/1455362.html

相关文章

linux内核源码分析--核心网络文件和目录

图3-2显示了在/proc/sys中由网络代码所使用的主要目录&#xff0c;就每个目录而言&#xff0c;都列出了在哪一章描述其文件。 proc/sys/net bridge ipv4 core route neigh conf 图3-2/proc/sys/net 中的核心目录 根据前借所述&#xff0c;我们来看net中的树根是如何定义的&…

【毕业设计】基于SSM的运动用品商城的设计与实现

1.项目介绍 在这个日益数字化和信息化的时代&#xff0c;随着人们购物习惯的转变&#xff0c;传统的实体商店已经无法满足人们日益增长的在线购物需求。因此&#xff0c;基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的运动用品商城项目应运而生&#xff0…

数据结构——链表专题2

文章目录 一、返回倒数第k 个节点二、链表的回文结构三、相交链表 一、返回倒数第k 个节点 原题链接&#xff1a;返回倒数第k 个节点 利用快慢指针的方法&#xff1a;先让fast走k步&#xff0c;然后fast和slow一起走&#xff0c;直到fast为空&#xff0c;最后slow指向的结点就…

Node.js爬虫在租房信息监测与分析中的应用

在当今数字化时代&#xff0c;房地产市场的信息变化迅速&#xff0c;租房信息的获取和分析对于租房者和房东都至关重要。随着互联网技术的发展&#xff0c;利用爬虫技术来监测和分析租房信息已成为一种常见的做法。本文将探讨如何利用Node.js爬虫在租房信息监测与分析中的应用前…

mysql学习手记

1.视图 简单一句&#xff1a;将需要重复使用的mysql语句放到视图中去 视图优点&#xff1a;1.简化查询 2.减少数据库改动的成本 3.限制访问 -- 创建视图 CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;-- 使用视图 SELECT * FROM…

Rust Course学习(编写测试)

如果友友你的计算机上没有安装Rust&#xff0c;可以直接安装&#xff1a;Rust 程序设计语言 (rust-lang.org)https://www.rust-lang.org/zh-CN/ Introduce 介绍 Testing in Rust involves writing code specifically designed to verify that other code works as expected. It…

【QEMU系统分析之实例篇(十八)】

系列文章目录 第十八章 QEMU系统仿真的机器创建分析实例 文章目录 系列文章目录第十八章 QEMU系统仿真的机器创建分析实例 前言一、QEMU是什么&#xff1f;二、QEMU系统仿真的机器创建分析实例1.系统仿真的命令行参数2.创建后期后端驱动qemu_create_late_backends()qtest_serv…

Llama3-Tutorial之LMDeploy高效部署Llama3实践

Llama3-Tutorial之LMDeploy高效部署Llama3实践 Llama 3 近期重磅发布&#xff0c;发布了 8B 和 70B 参数量的模型&#xff0c;lmdeploy团队对 Llama 3 部署进行了光速支持&#xff01;&#xff01;&#xff01; 书生浦语和机智流社区同学光速投稿了 LMDeploy 高效量化部署 Llam…