区间覆盖
Posted hhyx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区间覆盖相关的知识,希望对你有一定的参考价值。
# 题意
N个闭区间[ai,bi]以及一个线段区间[s,t],请你选择尽量少的区间,将指定线段区间完全覆盖。
输出最少区间数,如果无法完全覆盖则输出-1。
# 题解
1.按照左端点从小到大排序
2.从前往后依次枚举每个区间,在所有能覆盖的start区间中选择右端点最大的区间,然后将start更新成右端点的最大值
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e5+10; 4 struct Range 5 { 6 int l, r; 7 bool operator< (const Range &W)const 8 { 9 return l < W.l; 10 } 11 }ele[N]; 12 int n; 13 int main(){ 14 int st,ed; 15 scanf("%d%d", &st, &ed); 16 scanf("%d", &n); 17 for(int i=0;i<n;i++) cin>>ele[i].l>>ele[i].r; 18 19 sort(ele,ele+n); 20 21 int res = 0; 22 bool success = false; 23 24 for(int i=0;i<n;i++){ 25 int j=i,r= -2e9 ; 26 while(j < n && ele[j].l <= st) 27 { 28 r = max( r , ele[j].r ); 29 j++; 30 } 31 32 if(r<st){ 33 res=-1; 34 break; 35 } 36 res++; 37 38 if(r>=ed){ 39 success = true; 40 break; 41 } 42 st = r; 43 i = j - 1; 44 } 45 46 if(!success) res = -1; 47 48 printf("%d ",res); 49 return 0; 50 }
以上是关于区间覆盖的主要内容,如果未能解决你的问题,请参考以下文章
片段(Java) | 机试题+算法思路+考点+代码解析 2023
2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试