题目描述
给你一个二维整数数组 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
来源:力扣(LeetCode)
题目大意
给了一个二维数组ranges,这个数组的每一行,形成了这样的一个区间[ranges[i][0],ranges[i][1]],给了两个数left和right,形成了一个区间[left,right]问[left,right]里面所有的数是不是都在二维数组ranges生成的区间[ranges[i][0],ranges[i][1]]当中
思路描述
看到问题,由于数据量很小,所以第一想法就是走暴力可得出来代码他的时间复杂度是O(N*M)
然而如果数据量足够大还有另外一种使用差分数组的 方法(明天更新)他的时间复杂度 是O(N)
代码
暴力:
class Solution {
public boolean isCovered(int[][] ranges, int left, int right) {
int temp=0;
for(int i=left;i<=right;i++){
for(int i1=0;i1<ranges.length;i1++){
if(i>=ranges[i1][0]&&i<=ranges[i1][1]){
temp++;
break;
}
}
}
return (temp==right-left+1)?true:false;
}
}
写在最后
由于本人水平有限,如有错误,请指正,我会 听取 并改正!