回溯递归的剪枝模版
题目传送门
主要看灵神的二分模版,如何使用递归实现在 O ( m k ) O(mk) O(mk)时间内,实现对于二分中每个条件的判断。
一般套路:
dfs函数返回值为布尔类型
循环中使用一个dfs,如果其返回true,那么直接这个dfs返回true
技巧:
一个引用类型的值作为终止条件的判断,所有的dfs共享这个变量。
灵神代码:
class Solution {// 返回是否找到 k 个子数组和bool dfs(vector<vector<int>> &mat, int &left_k, int i, int s) {if (i < 0) // 能递归到这里,说明数组和不超过二分的 midreturn --left_k == 0; // 是否找到 k 个for (int x: mat[i]) { // 「枚举选哪个」,注意 mat[i] 是有序的if (x - mat[i][0] > s) // 选 x 不选 mat[i][0]break; // 剪枝:后面的元素更大,无需枚举if (dfs(mat, left_k, i - 1, s - (x - mat[i][0]))) // 选 x 不选 mat[i][0]return true; // 找到 k 个就一直返回 true,不再递归}return false;}public:int kthSmallest(vector<vector<int>> &mat, int k) {int sl = 0, sr = 0;for (auto &row: mat) {sl += row[0];sr += row.back();}// 二分模板 https://www.bilibili.com/video/BV1AP41137w7/int left = sl - 1, right = sr; // 开区间 (sl-1,sr)while (left + 1 < right) { // 开区间不为空// 循环不变量:// f(left) < k// f(right) >= kint mid = left + (right - left) / 2;int left_k = k;if (dfs(mat, left_k, mat.size() - 1, mid - sl)) // 先把第一列的所有数都选上right = mid; // 二分范围缩小至开区间 (left, mid)else // f(mid) < kleft = mid; // 二分范围缩小至开区间 (mid, right)}return right;}
};作者:灵茶山艾府
链接:https://leetcode.cn/problems/find-the-kth-smallest-sum-of-a-matrix-with-sorted-rows/solutions/2286593/san-chong-suan-fa-bao-li-er-fen-da-an-du-k1vd/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
时间复杂度思考:
为什么回溯的时间复杂度为 O ( m k ) O(mk) O(mk),dfs递归的过程是一棵树从顶到底,本题中如果能够递归到 i < 0 i<0 i<0,那么就是走完了一条路径,该路径花费时间 O ( m k ) O(mk) O(mk)。如果能够成功走完k条路径,那么就直接所有的dfs开始统一返回true,在此之前所有的dfs返回的都是false。
这样做的好处是,虽然每个dfs中的for循环还没结束,但是由于出现了一个true,提前终止了循环,所有就可以保证递归树中每一层的节点个数最多为k个。着实神奇,而且写法十分优雅!
相关文章:
回溯递归的剪枝模版
题目传送门 主要看灵神的二分模版,如何使用递归实现在 O ( m k ) O(mk) O(mk)时间内,实现对于二分中每个条件的判断。 一般套路: dfs函数返回值为布尔类型 循环中使用一个dfs,如果其返回true,那么直接这个dfs返回tru…...
2023-5-30第三十天
effort力气,精力,努力 affect影响,改变,感动 effect结果,效果,影响 worker ampersand &号 asterrisk *号 deal difficulty lose magic proprientary专卖的,所有权 property vow…...

我国中央商务区(CBD)的空间重构及发展模式
中央商务区(Central Business District,简称为CBD),原始意义为“商业会聚之地”是指一个国家或城市商务活动的主要集中的区域,是汇聚商务服务、金融服务、科技服务、咨询服务、会展服务、文化服务等服务业的集聚区域&a…...
Shell脚本的基本例子
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 大数据系列文章目录 目录 定义变量,输出变量输盘输入,执行Lunix命令变量禁止修改变量删除获取传递的变量字符串拼接&…...
C++设计模式介绍与分类
目录 一、设计模式定义 二、设计模式的优点 三、设计模式缺点 四、设计模式中的抽象思维 五、抽象的方法 六、设计模式应用场景 七、设计模式分类 附加知识 (1)C面向对象三种访问修饰符 (2)父类析构函数必须为虚函数 &…...

【Redis25】Redis进阶:分布式锁实现
Redis进阶:分布式锁实现 锁这个概念,不知道大家掌握的怎么样。我是先通过 Java ,知道在编程语言中是如何使用锁的。一般 Java 的例子会是操作一个相同的文件,但其实我们知道,不管是文件,还是数据库中的一条…...
【蓝桥杯算法题】输入输出流问题
【蓝桥杯算法题】输入输出流问题 题目:对文本文件进行带缓存的读写操作,可以读取文件不同位置的信息,可以进行对象序列化和对象反序列化。解释:总结: 题目:对文本文件进行带缓存的读写操作,可以…...
BUG提交单模版一
提交人员 XX 提交时间 2005-06-16 产品名称...
Android 12.0系统默认授予读写权限给第三方app
1.概述 在12.0的系统rom定制化开发中, 在6.0以前读写权限是默认授予的,app不需要申请权限 在10.0之前需要android.permission.WRITE_EXTERNAL_STORAGE和android.permission.READ_EXTERNAL_STORAGE 权限就可以了而在安卓11的时候继续强化对SD卡读写的管理,引入了MANAGE_EXTER…...

【生信】R语言在RNA-seq中的应用
R语言在RNA-seq中的应用 文章目录 R语言在RNA-seq中的应用生成工作流环境读取和处理数据由targets文件提供实验定义对实验数据进行质量过滤和修剪生成FASTQ质量报告 比对建立HISAT2索引并比对 读长量化读段计数样本间的相关性分析 差异表达分析运行edgeR可视化差异表达结果计算…...

【嵌入式环境下linux内核及驱动学习笔记-(14)linux总线、设备、驱动模型之platform】
目录 1、新驱动架构的导入1.1 传统驱动方式的痛点1.2 总线设备驱动架构 2、platform 设备驱动2.1 platform总线式驱动的架构思想2.2 platform _device相关的数据类型2.2.1 struct platform_device2.2.2 struct platform_device_id2.2.3 struct resource2.2.4 struct device 2.3…...

绝地求生 压q python版
仅做学习交流,非盈利,侵联删(狗头保命) 一、概述 1.1 效果 总的来说,这种方式是通过图像识别来完成的,不侵入游戏,不读取内存,安全不被检测。 1.2 前置知识 游戏中有各种不同的q械…...

云原生技术中的容器技术有哪些?
文章目录 云原生技术中的容器技术有哪些1、云原生的含义2、容器的含义3、云原生的技术的基石:容器技术4、容器技术有哪些? 结语 云原生技术中的容器技术有哪些 在现今的安全行业中云原生安全技术中的容器安全技术有哪些呢,很多用户都不知道具体的含义以…...
Gin中间件的详解 ,用Jwt-go 和 Gin 的安全的登陆的中间件
学习目标: Gin 在不同的group 设置不同的中间件或者过滤器 Gin 的group下的路由上中间件或过滤器 用Jwt-go 和 Gin 的安全的登陆的中间件 JWT 类,它基本有所有基本功能,包括:GenerateToken,GenerateRefreshToken, ValidateToken, ParseToken 学习内容: 1. Gin 在不同的g…...

Nginx网站部署
Nginx网站部署 一、访问状态统计配置二、基于授权的访问控制三、基于客户端的访问控制四、基于域名的 Nginx 虚拟主机五、基于IP 的 Nginx 虚拟主机六、基于端口的 Nginx 虚拟主机 一、访问状态统计配置 1.先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包…...
Hadoop优化
1.小文件 影响: 元数据的瓶颈在于文件的数量,无论单个文件的大小 资源大材小用 优化 计算:使用combininputformat提前合并小文件 JVM重用 存储:归档 2.map端 环形缓冲区-区域大小、溢写比列 提前combinerÿ…...
FPGA设计的指导性原则 (中)
1.6基本设计思想与技巧之二:串并转换 串并转换是FPGA设计的一个重要技巧,从小的着眼点讲,它是数据流处理的常用手 段,从大的着眼点将它是面积与速度互换思想的直接体现。串并转换的实现方法多种多样, 根据数据的排序和数量的要求,可以选用寄存器、RAM等实现。前面在乒乓…...

开源创新 协同融合|2023 开放原子全球开源峰会开源协作平台分论坛即将启幕
由开放原子开源基金会主办,阿里云、CSDN 等单位共同承办的开源协作平台分论坛即将于 6 月 12 日上午在北京经开区北人亦创国际会展中心隆重召开。作为 2023 开放原子全球开源峰会的重要组成部分,开源协作平台分论坛将聚焦于开源代码平台的创新功能、用户…...

第四章 相似矩阵与矩阵对角化
引言 题型总结中推荐例题有蓝皮书的题型较为重要,只有吉米多维奇的题型次之。码字不易,如果这篇文章对您有帮助的话,希望您能点赞、评论、收藏,投币、转发、关注。您的鼓励就是我前进的动力! 知识点思维导图 补充&…...
课程11:仓储层Repository实现、AutoMapper自动映射
课程简介目录 🚀前言一、Repository项目1.1创建Repository项目1.2 添加类1.2.1、添加类 RolePermissionRepositiory1.2.2、添加项目引用1.2.3、注入数据库上下文1.3 RolePermissionRepositiory接口的实现二、Repository注入2.1 提取接口2.2 添加项目依赖2.3 项目入口添加依赖…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...