LC1893-检查是否区域内所有整数都被覆盖
1893. 检查是否区域内所有整数都被覆盖
法1:时间复杂度\(O(n^2)\)
先暴力标记每个位置是否被覆盖,再检查目标区间
const int N = 55;
bool st[N];
class Solution {
public:
bool isCovered(vector<vector<int>>& ranges, int left, int right) {
memset(st,0,sizeof st);
for(auto& e : ranges)
for(int i = e[0]; i <= e[1]; ++i)st[i] = true;
for(int i = left; i <= right; ++i)if(!st[i])return false;
return true;
}
};
法2:时间复杂度\(O(n)\)
利用差分快速操作某一段区间。
const int N = 55;
int diff[N];
class Solution {
public:
bool isCovered(vector<vector<int>>& ranges, int left, int right) {
memset(diff, 0, sizeof diff);
int sum = 0;
for(auto& e : ranges) ++ diff[e[0]], -- diff[e[1] + 1];
for(int i = 0; i <= 50; ++i, sum += diff[i])
if(i >= left && i <= right && sum <= 0)return false;
return true;
}
};
浙公网安备 33010602011771号