检查是否区域内所有整数都被覆盖(遍历一次,区间相消即可)
Posted 秦枫-_-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查是否区域内所有整数都被覆盖(遍历一次,区间相消即可)相关的知识,希望对你有一定的参考价值。
根据题意,就是要在ranges中找到能包含left和right的所有区间
那依次遍历ranges所有区间,当[[start],[end]]跟[[left],[right]]没有重复区间时直接跳过
当[[left],[right]]完全包含了[[start],[end]],把start,end区间消去然后判断left,start-1&&end+1,right
当[[start],[end]]包含[[left],[right]]的部分区间分为两种情况:
一种是包含了[[left],[right]]左半部分区间:left>=start,那么消去left,end区间即left=end+1
一种是包含了[[left],[right]]右半部分区间:right<=end,那么消去start,right区间即right=start-1
出现left>right 说明包含了所有left,right区间return true
遍历完后如果剩余有区间 return false
class Solution {
public boolean isCovered(int[][] ranges, int left, int right) {
int m=ranges.length;
for(int i=0;i<m;i++){
if(left>ranges[i][1]||right<ranges[i][0])continue;
if(left<ranges[i][0]&&right>ranges[i][1])
return isCovered(ranges,left,ranges[i][0]-1)&&isCovered(ranges,ranges[i][1]+1,right);
if(left>=ranges[i][0])
left=ranges[i][1]+1;
if(right<=ranges[i][1])
right=ranges[i][0]-1;
if(left>right)return true;
}
return false;
}
}
以上是关于检查是否区域内所有整数都被覆盖(遍历一次,区间相消即可)的主要内容,如果未能解决你的问题,请参考以下文章
《LeetCode之每日一题》:100.检查是否区域内所有整数都被覆盖
[E差分] lc1893. 检查是否区域内所有整数都被覆盖(差分计数+模拟+双周赛54_1)
LeetCode138. 复制带随机指针的链表/1893. 检查是否区域内所有整数都被覆盖/370. 区间加法(差分数组+前缀和)
LeetCode 1893 检查是否区域内所有整数都被覆盖[前缀和 暴力 差分数组] HERODING的LeetCode之路