当前位置: 首页 > news >正文

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

给你一个二维整数数组 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.mrgr.cn/news/25391.html

相关文章:

  • Linux和C语言(Day 12)
  • java基于PDF底层内容流的解析对文本内容进行编辑
  • Arduino 2线串行 通信 驱动 LCD 12864
  • 尚硅谷的尚乐代驾项目
  • 【北京迅为】iTOP-i.MX6开发板使用手册第四部分固件编译第十四章非设备树Android4.4系统编译
  • Git 提取和拉取的区别在哪
  • 算法:数字化系统的智慧核心
  • 系统分析师9:公共基础测试题
  • GitLab权限及设置
  • vector的简单实现
  • 核心知识点合集
  • Unity 特殊文件夹
  • 项目管理系统详解:优势、特点及必备工具
  • 软件开发详解:同城O2O系统源码的架构设计与外卖跑腿APP的开发要点
  • Spring部分常见面试题
  • 【信号】信号的保存
  • 杂七杂八-系统环境安装
  • 保姆级离线+windows环境+大模型前端UI安装(二)
  • 240416 初始化列表 构造与隐式类型转换 static成员 友元 内部类
  • 专业版PyCharm使用plt.show()显示图像时,如何不显示在右侧工具栏中,而是直接弹出来