当前位置:   article > 正文

LeetCode 1893. 检查是否区域内所有整数都被覆盖

LeetCode 1893. 检查是否区域内所有整数都被覆盖

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

提示 1

Iterate over every integer point in the range [left, right].


提示 2

For each of these points check if it is included in one of the ranges.

解法:差分数组

关于对差分数组的详细讲解:LeetCode 1094. 拼车-CSDN博客

差分数组的类似题型:

LeetCode 1109. 航班预订统计-CSDN博客

LeetCode 2381. 字母移位 II-CSDN博客

LeetCode 2406. 将区间分为最少组数-CSDN博客

LeetCode 2772. 使数组中的所有元素都等于零-CSDN博客

LeetCode 2528. 最大化城市的最小电量-CSDN博客

Java版:

  1. class Solution {
  2. public boolean isCovered(int[][] ranges, int left, int right) {
  3. int n = right - left + 1;
  4. int[] diff = new int[n];
  5. for (int[] range : ranges) {
  6. int start = range[0];
  7. int end = range[1];
  8. if (start > right || end < left) {
  9. continue;
  10. }
  11. diff[Math.max(start - left, 0)]++;
  12. if (end - left + 1 < n) {
  13. diff[end - left + 1]--;
  14. }
  15. }
  16. for (int i = 0; i < n; i++) {
  17. if (i > 0) {
  18. diff[i] += diff[i - 1];
  19. }
  20. if (diff[i] <= 0) {
  21. return false;
  22. }
  23. }
  24. return true;
  25. }
  26. }

Python版:

  1. class Solution:
  2. def isCovered(self, ranges: List[List[int]], left: int, right: int) -> bool:
  3. n = right - left + 1
  4. diff = [0] * n
  5. for start, end in ranges:
  6. if start > right or end < left:
  7. continue
  8. diff[max(start - left, 0)] += 1
  9. if end - left + 1 < n:
  10. diff[end - left + 1] -= 1
  11. return all(d > 0 for d in accumulate(diff))

复杂度分析

  • 时间复杂度:O(n+m),其中 m 是数组 ranges 的长度,n 是 差分数组 diff 的长度。
  • 空间复杂度:O(n),即为差分数组 diff 需要使用的空间。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/1021357
推荐阅读
相关标签
  

闽ICP备14008679号