【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖

news/2024/11/13 8:00:47/

给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。

如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖,那么请你返回 true ,否则返回 false 。

已知区间 ranges[i] = [starti, endi] ,如果整数 x 满足 starti <= x <= endi ,那么我们称整数x 被覆盖了。

示例 1:
输入:ranges = [[1,2],[3,4],[5,6]], left = 2, right = 5
输出:true
解释:2 到 5 的每个整数都被覆盖了:

  • 2 被第一个区间覆盖。
  • 3 和 4 被第二个区间覆盖。
  • 5 被第三个区间覆盖。

示例 2:
输入:ranges = [[1,10],[10,20]], left = 21, right = 21
输出:false
解释:21 没有被任何一个区间覆盖。

提示:
1 <= ranges.length <= 50
1 <= starti <= endi <= 50
1 <= left <= right <= 50

差分

class Solution {
public:bool isCovered(vector<vector<int>>& ranges, int left, int right) {int max_end = INT_MIN;int min_start = INT_MAX;for (auto& range : ranges) {min_start = min(min_start, range[0]);max_end = max(max_end, range[1]);}min_start = min(min_start, left);max_end = max(max_end, right);vector<int> diff(max_end+2);for(auto& row : ranges){diff[row[0]]++;diff[row[1]+1]--;}int s = 0;for(int i = min_start; i <= right; i++){s += diff[i];if(i >= left && s <=0){return false;}}return true;}
};

这道题和2848相似,如果使用差分的方法做这道题,需要理解的是for(int i = min_start; i <= max_end; i++)为什么是从min_start到max_end。首先因为是差分的办法,所以i开始必须在ranges中最小的range[0]及其左边开始,但是由于可能会出现left在最小range[0]的左边,从而在遍历left到最小range[0]的时候满足了i>left而且s这时候又为0,会返回false。为了确保包含这种情况,我们取min_start为最小range[0]和left的较小值。我们定义max_end的作用就是确保row[1]+1和right都能在diff里不越界。当i到right的时候进行最后一次循环,因为我们的目的是找出left到right范围内的值是否有覆盖,所以遍历right以后的范围没有意义。总而言之我们需要遍历left到right的diff,但是又因为差分要保证从最小的range[0]即左边开始,所以在左边界取min(min_start, range[0])


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

相关文章

4.铝箔缺陷检测项目复盘

硬件 1.装配的时候&#xff0c;在最初阶段就要考虑后面的走线&#xff0c;不能一团乱的塞进去完事&#xff0c;起码相同功能的线要用扎带处理一下。然后理顺好&#xff0c;要不后期理线是灾难。 2.有线标&#xff0c;线号&#xff0c;比如哪根线代表哪个相机&#xff0c;调试的…

CTFShow-信息搜集

Web1&#xff1a; ​ 题目描述&#xff1a;开发注释未及时删除 。 ​ 打开题目后提示web1:where is flag? ​ ctrlu读取源码。 Web2&#xff1a; ​ 题目描述&#xff1a;js前台拦截 无效操作 ​ 打开题目后显示&#xff1a;无法查看源代码 ​ 右键无法用&#xff0c;…

react 基础语法

前置知识 类的回顾 通过class关键字定义一个类 类名首字母大写 class类有constructor构造器 new 一个类得到一个实例 类还有方法&#xff0c;该方法也会在其原型上 static静态数据&#xff0c;访问静态属性通过 类名.id getter和setter getter&#xff1a;定义一个属性&…

继图书管理项目遗留的问题修改

1. 查询查不到&#xff1f; 因为我的数据库变量是下划线命名的&#xff0c;user_id &#xff0c;而一种规范是 &#xff0c;这个时候的实体类的变量要写成驼峰型的&#xff0c;就是userId。 第二种就是直接把数据库变量和实体类变量的名字设成相同的。 这样封装成的对象才能…

Vue 常用高级指令解析

Vue 高级指令的重要性 Vue 高级指令是一种扩展 Vue.js 框架的功能的方式&#xff0c;可以让你在处理 DOM 元素时具有更多的控制权。它们可以通过自定义指令的方式进行编写和应用。 高级指令的重要性在于&#xff0c;它们使开发者能够通过 Vue 框架来创建更加复杂和灵活的交互…

【Vmware16安装教程】

&#x1f4d6;Vmware16安装教程 ✅1.下载✅2.安装 ✅1.下载 官网地址&#xff1a;https://www.vmware.com/ 百度云盘&#xff1a;Vmware16下载 123云盘&#xff1a;Vmware16下载 ✅2.安装 1.双击安装包VMware-workstation-full-16.1.0-LinuxProbe.Com.exe&#xff0c;点击…

使用OpenCV进行模糊检测(拉普拉斯算子)

参考&#xff1a; 使用OpenCV进行模糊检测&#xff08;拉普拉斯算子&#xff09; 代码&#xff1a; # import the necessary packages from imutils import paths import argparse import cv2 import osdef variance_of_laplacian(image):# compute the Laplacian of the ima…

UE5安卓项目打包安装

Android studio安装 参考&#xff1a;https://docs.unrealengine.com/5.2/zh-CN/how-to-set-up-android-sdk-and-ndk-for-your-unreal-engine-development-environment/ 打开android studio的官网&#xff1a;Download Android Studio & App Tools - Android Developers …