【C++二分查找】2271. 毯子覆盖的最多白色砖块数

news2024/9/25 11:22:26

本文涉及的基础知识点

C++二分查找

LeetCode2271. 毯子覆盖的最多白色砖块数

给你一个二维整数数组 tiles ,其中 tiles[i] = [li, ri] ,表示所有在 li <= j <= ri 之间的每个瓷砖位置 j 都被涂成了白色。
同时给你一个整数 carpetLen ,表示可以放在 任何位置 的一块毯子的长度。
请你返回使用这块毯子,最多 可以盖住多少块瓷砖。
示例 1:
在这里插入图片描述

输入:tiles = [[1,5],[10,11],[12,18],[20,25],[30,32]], carpetLen = 10
输出:9
解释:将毯子从瓷砖 10 开始放置。
总共覆盖 9 块瓷砖,所以返回 9 。
注意可能有其他方案也可以覆盖 9 块瓷砖。
可以看出,瓷砖无法覆盖超过 9 块瓷砖。
示例 2:
在这里插入图片描述

输入:tiles = [[10,11],[1,1]], carpetLen = 2
输出:2
解释:将毯子从瓷砖 10 开始放置。
总共覆盖 2 块瓷砖,所以我们返回 2 。
提示:
1 <= tiles.length <= 5 * 104
tiles[i].length == 2
1 <= li <= ri <= 109
1 <= carpetLen <= 109
tiles 互相 不会重叠 。

二分查找

规则二:毯子的左边界和一定和某段瓷砖的左边界(tiles[i][0])对齐。
条件三:能覆盖住x或更多的瓷砖。
本题有解大于等于x    ⟺    \iff 规则一下有解大于等于x。下面分别证明:充分性和必要性。
充分性:如果毯子的左边界在某段瓷砖上但不在此段的左边界。左移毯子,左边一定多覆盖一块瓷砖;右边最多少盖住一块瓷砖。
如果毯子的左边界不在瓷砖上,右移。左边覆盖的瓷砖没减少,右边可能增加。
必要性:规则一和本题规则的子集,本题规则下可以选择规则一的方案。
这就是《喜缺全书算法册》的证明一。

先对tiles排序。
枚举各瓷砖段tiles[i],it指向第一个没覆盖的没砖段左端,lower_bound(…tiles[i]+carpetLen),–it 就是被覆盖的最后一段。由于至少盖住了tiles[i],所以–it一定合法。
totals记录个瓷砖段之前的瓷砖总数,不包括tiles[i]。令瓷砖覆盖了tiles[i…j],则覆盖的数量:totals[j] - totals[i] + (end - tiles[j])
end = min(tiles[i]+carpetLen,tiles[j][1]+1) 毯子末端和最后一段瓷砖有三种关系:<=>。

代码

核心代码

	class Solution {
		public:
			int maximumWhiteTiles(vector<vector<int>>& tiles, int carpetLen) {
				sort(tiles.begin(), tiles.end());
				int total = 0;
				vector<int> totals;
				for (const auto& v : tiles) {
					totals.emplace_back(total);
					total += v[1] - v[0] + 1;
				}
				int ret = 0;
				for (int i = 0; i < tiles.size();i++ ) {
					auto j = lower_bound(tiles.begin(), tiles.end(), tiles[i][0] + carpetLen,[&](vector<int>& v1, int val) {return v1[0] < val; }) - tiles.begin();	
					j--;
					const int cur = totals[j] - totals[i] + (min(tiles[i][0] + carpetLen,tiles[j][1]+1) - tiles[j][0]);
					ret = max(ret, cur);
				}
				return ret;
			}
		};

核心代码

vector<vector<int>> tiles;
		int carpetLen;
		TEST_METHOD(TestMethod11)
		{
			tiles = { {1,5},{10,11},{12,18},{20,25},{30,32} }, carpetLen = 10;
			auto res = Solution().maximumWhiteTiles(tiles, carpetLen);
			AssertEx(9, res);
		}
		TEST_METHOD(TestMethod12)
		{
			tiles = { {10,11},{1,1} }, carpetLen = 2;
			auto res = Solution().maximumWhiteTiles(tiles, carpetLen);
			AssertEx(2, res);
		}

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

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

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

相关文章

C++ | Leetcode C++题解之第381题O(1)时间插入、删除和获取随机元素-允许重复

题目&#xff1a; 题解&#xff1a; class RandomizedCollection { public:unordered_map<int, unordered_set<int>> idx;vector<int> nums;/** Initialize your data structure here. */RandomizedCollection() {}/** Inserts a value to the collection. …

笔记报警管理

1. IOT创建新产品 睡眠检测带 2. 养老后台 添加了一个设备 睡眠检测带_201_1 3. 新增了模拟器(3个模拟js运行) 4. 创建了消费者组(默认DEFAULT) 5. 创建订阅(3个产品的上报信息 传给DEFAULT)消息处理 前面我们已经完成了设备的管理&#xff0c;现在&#xff0c;我们就来处…

50.x86游戏实战-XXX副本内瞬图

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

《前端攻城狮 · Snowflake 雪花算法》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

Ruff :是一个用Rust编写的极快的 Python linter 和代码格式化程序

安装 pip install ruff 语法检查 要对代码运行 linter&#xff0c;我们使用 ruff check . 如果你想在单个文件上运行它&#xff0c;请这样做 ruff check <filename.py> 总共有 415 个错误。其中 33 个可以修复&#xff01; 为了修复它们&#xff0c;我们使用标志--f…

深度学习实用方法 - 选择超参数篇

序言 在深度学习的浩瀚领域中&#xff0c;超参数的选择无疑是通往卓越模型性能的一把关键钥匙。超参数&#xff0c;作为训练前设定的、用于控制学习过程而非通过学习自动获得的参数&#xff0c;如学习率、批量大小、网络层数及节点数等&#xff0c;直接影响着模型的收敛速度、…

LLMOP 面向LLM编程,让你的接口和代码对LLM更友好!

LLM Oriented Programming ApiHug Lint 检查报告 - ApiHugApihug quality lint tools to check api design violationshttps://apihug.com/zhCN-docs/tool/apihug-lint ​LLMOP 面向LLM编程&#xff08;LLMOP&#xff09;代表了我们构思和设计API的范式转变。该方法旨在创建不…

TRIZ理论在传感技术创新中的应用优势

传感技术作为连接物理世界与数字世界的桥梁&#xff0c;正以前所未有的速度推动着社会进步与产业升级。而TRIZ&#xff08;发明问题解决理论&#xff09;这一强大的创新方法论&#xff0c;也开始悄然在传感技术领域绽放异彩&#xff0c;为创新者提供了前所未有的设计灵感与解决…

CCF CSP题解:因子化简(202312-2)

链接和思路 OJ链接&#xff1a;传送门。 问题重述 本题基于一个基本事实&#xff0c;即任何一个大整数 n n n都可以唯一地分解为如下形式 n p 1 t 1 p 2 t 2 ⋯ p m t m n p_1^{t_1} \times p_2^{t_2} \times \cdots \times p_m^{t_m} np1t1​​p2t2​​⋯pmtm​​其中…

软件测试 | 测试用例Ⅱ

基于需求的设计方法 测试人员接到需求后&#xff0c;要对需求进行分析和验证&#xff0c;从合理的需求中进一步分析细化需求&#xff0c;从细化的需求中找出测试点&#xff0c;根据这些测试点再去设计测试用例。 上面就是根据需求文档先设计出来的初步的测试用例&#xff0c;而…

数据库表太多,如何快速定位到需要字段

MySQL数据库表太多&#xff0c;如何快速定位到需要字段 问题&#xff1a; 数据库的表太多&#xff0c;自己只通过后端代码&#xff0c;知道数据字段名。现在想搜索数据库中所有表&#xff0c;查到对应字段&#xff0c;实现报表开发。 一、方案 在MySQL数据库中&#xff0c;如…

【web网页制作】中国传统文化书法主题html网页制作开发div+css(6页面附效果源码)

HTMLCSS传统文化主题书法网页制作 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、网页效果菜单切换效果PageA、整体页Page1、主页Page2、行书页Page3、楷书页Page4、隶书页Page5、篆书页Page6、草书页 &#x1f40b;三、网页架构与技术…

微前端集成优化:让所有子应用体积更小,加载更快!

简介 随着前端的日益发展&#xff0c;微前端架构越来越受到青睐。它通过将前端应用拆分为多个独立的子应用&#xff0c;每个子应用可以独立开发、部署和运行&#xff0c;从而提升了开发效率和团队协作。目前主流的微前端方案应该是qiankun了。 以笔者公司为例&#xff0c;采用…

AI在医学领域:基础模型和视觉-语言模型在计算病理学应用概述

近年来&#xff0c;人工智能&#xff08;AI&#xff09;基于方法在计算病理学&#xff08;CPath&#xff09;领域中的应用迅速增长&#xff0c;这主要得益于数字幻灯片扫描仪的广泛采用。因此&#xff0c;大规模的全幻灯片图像&#xff08;Whole Slide Images, WSIs&#xff09…

Linux内存管理(1)——MMU内存管理单元及Buddy算法详解

文章目录 1.内存管理单元&#xff08;MMU&#xff09;1.1 MMU的作用1.2 MMU相关概念1.3 ARM处理器访问内存过程 2.内存优化之buddy伙伴算法2.1 背景2.2 优缺点2.2 原理 最近复习Linux内存管理部分&#xff0c;简单将自己的理解记录一下 内存&#xff1a;包括随机存储器&#xf…

委托 by 操作符

属性委托给属性 使用 by:: 操作符&#xff0c;代表调用系统内置的方法。 读&#xff1a;getVaule 写&#xff1a;setValue 共享同一个数据。 /*** 属性委托给属性* by:: 系统内置的方法&#xff0c;非自定义的* 共享同一个数据*/ var num:Float 9999.0f/*** newNum属性委托…

黑神话悟空-画质提升+帧数提升+超宽屏+写实画质补丁+无光追也可拥有的超强画质

超真实画质提升&#xff01;&#xff01;&#xff01; 下载地址&#xff1a;https://pan.quark.cn/s/529202fbbbef

Python | Leetcode Python题解之第381题O(1)时间插入、删除和获取随机元素-允许重复

题目&#xff1a; 题解&#xff1a; import random class RandomizedCollection:def __init__(self):"""Initialize your data structure here."""self.table {}self.ns []def insert(self, val: int) -> bool:"""Inserts …

WPF 手撸插件 七 日志记录(二)

1、本文使用Serilog进行记录日志&#xff0c;目前想只用log4net进行日志记录&#xff0c;但是Serilog有想学习一下&#xff0c;所有这里使用控制台项目来学习一下Serilog。我使用的还是.Net Framework 4.5. 2、NuGet 安装Serilog 2.12.0、Serilog.Sinks.Console 4.1.0&#xf…

智能学习辅助系统——后端部分

目录 前言 一、准备工作 1.需求&环境搭建 1.1需求说明 1.2环境搭建 2.开发规范 2.1 开发规范-REST 2.2 开发规范-统一响应结果 3.开发流程 二、部门管理 1.查询部门 &#xff08;1&#xff09;原型和需求 &#xff08;2&#xff09;接口文档 &#xff08;3&…