1893.检查是否区域内所有整数都被覆盖
链接:1893.检查是否区域内所有整数都被覆盖
难度:Easy
标签:数组、哈希表、前缀和
简介:给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖,那么请你返回 true ,否则返回 false 。
题解 1 - typescript
- 编辑时间:2021-07-23
- 执行用时:100ms
- 内存消耗:40.8MB
- 编程语言:typescript
- 解法介绍:合并相近区间。
function isCovered(ranges: number[][], left: number, right: number): boolean {
ranges.sort(([l1, r1], [l2, r2]) => (l1 === l2 ? r1 - r2 : l1 - l2));
const rangeList: number[][] = [];
for (const range of ranges) {
if (rangeList.length === 0) {
rangeList.push(range);
continue;
}
const [l1, r1] = rangeList.pop()!;
const [l2, r2] = range;
if (l2 >= l1 && r2 <= r1) rangeList.push([l1, r1]);
else if (r1 < l2 - 1) rangeList.push([l1, r1], [l2, r2]);
else rangeList.push([l1, r2]);
}
for (const [l, r] of rangeList) {
if (left >= l && right <= r) return true;
}
return false;
}