【贪心】个人练习-Leetcode-2271. Maximum White Tiles Covered by a Carpet

题目链接:https://leetcode.cn/problems/maximum-white-tiles-covered-by-a-carpet/description/

题目大意:给定一个左右区间序列tiles[][],每个元素代表这个区间被瓷砖覆盖(左右都是闭合的)。给定一块毯子,长度为carpetLen,求这块毯子能覆盖的最大瓷砖数。

思路:贪心做,从左往右遍历的话,必然是将毯子的右端放在某片连续的瓷砖的右端点是最优的,因为如果再往右,只会碰到空的,瓷砖数-1;如果往左,可能-1也可能不变,但不会增加。

于是我们先对瓷砖排序。然后遍历,考虑毯子覆盖每片连续瓷砖的右端点的情况。实际上我和题解想法是一样的,没想到题目的时间瓶颈其实并不在贪心…

我的做法是,在遍历的每一轮时(毯子盖在i片连续瓷砖的右端),用二分法找到第一个右端点大于【毯子的左端点】的连续瓷砖片j。然后从后往前加,然后考虑一下【j左端点】是否小于【毯子的左端点】。这样做结果是没错的,但是会超时。原因是即使用了二分法,循环内层因为还要【从后往前加】,复杂度还是 O ( N ) O(N) O(N)。可以增加一个前缀和来避免这个问题,这样内部复杂度就是 O ( log ⁡ N ) O(\log N) O(logN)

完整代码

class Solution {
public:int maximumWhiteTiles(vector<vector<int>>& tiles, int carpetLen) {sort(tiles.begin(), tiles.end(), [](vector<int>& a, vector<int>& b) {return a[0] < b[0];});int n = tiles.size();vector<int> pre(n+1, 0);pre[0] = tiles[0][1] - tiles[0][0];for (int i = 1; i <= n; i++) {pre[i] = pre[i-1] + tiles[i-1][1] - tiles[i-1][0] + 1;}int ans = 0;for (int i = 0; i < n; i++) {int ltb = tiles[i][1] - carpetLen + 1;if (ltb < 1)ltb = 1;int tmp = 0;int l = 0, r = i;while (l < r) {int mid = (r-l)/2 + l;if (tiles[mid][1] < ltb)l = mid+1;elser = mid;}int j = l;tmp += pre[i+1] - pre[j+1];if (ltb > tiles[j][0])tmp += tiles[j][1] - ltb + 1;elsetmp += tiles[j][1] - tiles[j][0] + 1;ans = max(tmp, ans);}return ans;}
};

不过看了题解,有更快的做法,就是维护一个和cover来表示当前能覆盖的连续瓷砖块的和(只覆盖到一部分也算)。cover再和毯子边缘计算一下就能得到覆盖的自传数。然后每轮循环,向右移动,更新这个cover。实际上我认为这也是 O ( N ) O(N) O(N),但是这个数往往比较小。

完整代码

class Solution {
public:int maximumWhiteTiles(vector<vector<int>>& tiles, int carpetLen) {sort(tiles.begin(), tiles.end(), [](vector<int>& a, vector<int>& b) {return a[0] < b[0];});int n = tiles.size();vector<int> pre(n+1, 0);pre[0] = tiles[0][1] - tiles[0][0];for (int i = 1; i <= n; i++) {pre[i] = pre[i-1] + tiles[i-1][1] - tiles[i-1][0] + 1;}int ans = 0;for (int i = 0; i < n; i++) {int ltb = tiles[i][1] - carpetLen + 1;if (ltb < 1)ltb = 1;int tmp = 0;int l = 0, r = i;while (l < r) {int mid = (r-l)/2 + l;if (tiles[mid][1] < ltb)l = mid+1;elser = mid;}int j = l;tmp += pre[i+1] - pre[j+1];if (ltb > tiles[j][0])tmp += tiles[j][1] - ltb + 1;elsetmp += tiles[j][1] - tiles[j][0] + 1;ans = max(tmp, ans);}return ans;}
};

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

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

相关文章

使用 Ubuntu x86_64 平台交叉编译适用于 Linux aarch64(arm64) 平台的 QT5(包含OpenGL/WebEngine支持) 库

使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库 目录 使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库写在前面前期准备编译全流程1. 环境搭建2. 复制源码包并解压&#xff0c;创…

PrestaShop的目录结构详解

admin-dev&#xff1a;这个目录通常包含开发和测试PrestaShop后台时所需的脚本和配置文件。例如&#xff0c;它可能包含用于测试API的脚本或用于在开发过程中快速访问某些后台功能的快捷方式。 app&#xff1a;这个目录是PrestaShop的核心&#xff0c;包含了许多关键的组件。例…

解决HTTP 400 Bad Request错误的方法

解决HTTP 400 Bad Request错误的方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在进行网络通信时&#xff0c;HTTP 400 Bad Request错误是相对常见的问题…

在Mac上恢复丢失或未保存的Word文档的5种有效方法

“救命&#xff01;我想在Mac上恢复丢失的Word文档。就在 1 小时前&#xff0c;我错误地删除了它们&#xff0c;并清空了垃圾桶。这些Word文档对我来说非常重要。我不知道如何恢复它们&#xff0c;谁能帮我&#xff1f;提前致谢&#xff01; 没有什么比忘记保存 Word 文档或在…

3d模型里地毯的材质怎么赋予?---模大狮模型网

在进行3D建模时&#xff0c;赋予地毯逼真的材质是营造现实感和增强场景氛围的重要步骤。模大狮将介绍在常见的3D建模软件中&#xff0c;如何有效地为地毯赋予各种材质&#xff0c;以及一些实用的技巧和注意事项。 一、选择合适的地毯材质 在3D建模中&#xff0c;地毯的材质选择…

Spring Boot与WebFlux的实战案例

Spring Boot与WebFlux的实战案例 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨如何利用Spring Boot和WebFlux构建响应式应用的实战…

MySQL之可扩展性(七)

可扩展性 通过集群扩展 理想的扩展方案时单一逻辑数据库能够存储尽可能多的数据&#xff0c;处理尽可能多的查询&#xff0c;并如期望的那样增长。许多人的第一想法就是建立一个"集群"或者"网格"来无缝处理这些事情&#xff0c;这样应用就无须去做太多工…

LangServe APIHandler:定制化LangChain REST API

LangServe&#xff0c;这一创新性的工具&#xff0c;专为简化LangChain对象及链的部署而生&#xff0c;将它们转化为REST API&#xff0c;从而赋能开发人员构建更为敏捷高效的应用。与FastAPI的深度融合以及Pydantic的精准数据验证&#xff0c;使得LangServe成为构建微服务的理…

K8S中的某个容器突然出现内存和CPU占用过高的情况解决办法

当K8S中的某个容器突然出现内存和CPU占用过高的情况时&#xff0c;可以采取以下步骤进行处理&#xff1a; 观察和分析&#xff1a; 使用kubectl top pods命令查看集群中各个Pod的CPU和内存占用情况&#xff0c;找出占用资源高的Pod。使用kubectl describe pod <pod-name>…

双向长短期记忆神经网络BiLSTM

先说一下LSTM LSTM 是一种特殊的 RNN&#xff0c;它通过引入门控机制来解决传统 RNN 的长期依赖问题。 LSTM 的结构包含以下几个关键组件&#xff1a; 输入门&#xff08;input gate&#xff09;&#xff1a;决定当前时间步的输入信息对细胞状态的影响程度。遗忘门&#xff…

C盘满了怎么办?用这方法彻底拯救你的C盘

C盘满了怎么办&#xff1f;用这方法彻底拯救你的C盘。我们的C盘是整个电脑运行的核心部分&#xff0c;里面装载了很重要的系统框架和数据&#xff0c;由于使用的时间越来越长&#xff0c;C盘也会积累很多的垃圾&#xff0c;这样就经常容易出现爆满的情况。 对于C盘爆满&#x…

扫扫地,搞搞卫生 ≠ 车间5S管理

在制造业的日常运营中&#xff0c;车间管理是一项至关重要的工作&#xff0c;它直接关系到生产效率、产品质量以及员工的工作环境。然而&#xff0c;许多人常常将简单的“扫扫地&#xff0c;搞搞卫生”等同于车间5S管理&#xff0c;这种误解不仅可能导致管理效果不佳&#xff0…

Halcon 如何让图像自适应窗口

一 如何让图像自适应窗口 read_image(Image,1)get_image_size(Image,Width, Height)dev_close_window()dev_open_window(0,0,Width/2,Height/2,black,WindowHandle)dev_set_part(0,0,Height-800,Width-800)dev_display(Image)二 如何实现彩色图像转化为灰色图像 read_image(I…

浅谈逻辑控制器之Switch控制器

浅谈逻辑控制器之Switch控制器 Switch Controller是Apache JMeter中一个强大的逻辑控制器&#xff0c;它允许用户基于特定的变量值或参数来控制哪些子采样器被执行。与简单地按照配置顺序执行的控制器不同&#xff0c;Switch Controller根据提供的“switch value”来决定执行哪…

鸿蒙HCIP应用开发学什么?

HCIP-HarmonyOS Application Developer 课程大纲 一&#xff1a;HarmonyOS 系统介绍 -&#xff08;3 课时&#xff09; - 系统及应用场景介绍&#xff1b;HarmonyOS 系统介绍&#xff1b;HarmonyOS 定义 HarmonyOS 特征&#xff1b; - 统- OS&#xff0c;弹性部署&#xff1b…

深度相机识别物体——实现数据集准备与数据集分割

一、数据集准备——Labelimg进行标定 1.安装labelimg——pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple 2.建立相应的数据集存放文件夹 3.打开labelimg&#xff0c;直接在命令行输入labelimg即可&#xff0c;并初始化 4.开始标注&#xff0c;设置标注好…

【高考志愿】自动化

目录 一、专业概述 二、课程设计 三、就业前景与方向 四、志愿填报 五、自动化专业排名 一、专业概述 高考志愿自动化专业选择&#xff0c;无疑是迈向现代化工业与科技发展的一把金钥匙。自动化专业&#xff0c;作为现代工程领域的重要支柱&#xff0c;融合了计算机、电子…

Streams.js:简化 JavaScript 数据流处理

在现代的 Web 开发中&#xff0c;数据流处理是一个常见的需求。从处理用户输入到处理大规模数据集&#xff0c;JavaScript 开发者需要一种有效的方式来处理和转换数据流。Streams.js 是一个优秀的 JavaScript 库&#xff0c;提供了强大的工具来简化数据流处理的复杂性。 什么是…

宝兰德开源多款仓颉产品组件,共筑新语言生态

2024年6月21日下午&#xff0c;华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用&#xff0c;全新出发&#xff01;》中向全球开发者介绍了华为自研仓颉编程语言&#xff0c;并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言…

【人工智能学习之图像操作(三)】

【人工智能学习之图像操作&#xff08;三&#xff09;】 图像滤波滤波概念卷积平滑算子均值滤波高斯滤波中值滤波双边滤波锐化算子USM锐化梯度算子 傅里叶变换直方图直方图直方图均衡化自适应均衡化2D 直方图直方图反向投影 图像滤波 滤波概念 滤波过程就是把不需要的信号频率…