AcWing 803. 区间合并

网址 https://www.acwing.com/solution/AcWing/content/1590/

题目描述
给定n个区间[l, r]。

合并所有有交集的区间。

输出合并完成后的区间个数。

例如:[1,3]和[2,6]可以合并为一个区间[1,6]。

输入格式
第一行包含整数n。

接下来n行,每行包含两个整数 l 和 r。

输出格式
共一行,包含一个整数,表示合并区间完成后的区间个数。

样例
输入样例:
5
1 2
2 4
5 6
7 8
7 9
输出样例:
3

 

算法1
(暴力模拟) O(n2)O(n2)
模版题么 简单暴力模拟
抛开输入输出不说
判断 各个区间是否重合
主要是四种情况
1 A区间的起点在B区间的起点终点之间 Bstart Astart Bend Aend
2 A区间起点终点在B区间的起点终点之间 Bstart Astart Aend Bend
反之亦然
3 B区间的起点在A区间的起点终点之间 Astart Bstart Aend Bend
4 B区间起点终点在A区间的起点终点之间 Astart Bstart Bend Aend

但是代码可以归为两种情况判断

int s1 = vp[i].first;
int e1 = vp[i].second;

int s2 = vp[j].first;
int e2 = vp[j].second;


if( (s1>= s2 && s1<= e2) || (s2 >=s1 && s2 <= e1) ){
}
然后进行合并
两者区间合并后就是 起点是两者起点的最小值 终点是两者终点的最大值
代码

merges = min(s1,s2);
mergee = max(e1,e2);

vp[j].first = merges;
vp[j].second = mergee;

复制代码
 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 int T;
 8 const int N= 100100;
 9 vector<pair<int,int>> vp(N,pair<int,int>(-1,-1));
10 
11 int Merge(int i,int j)
12 {
13     int s1 = vp[i].first;
14     int e1 = vp[i].second;
15 
16     int s2 = vp[j].first;
17     int e2 = vp[j].second;
18 
19     int merges = 0;int mergee= 0;
20 
21     if( (s1>= s2 && s1<= e2) ||  (s2 >=s1 && s2 <= e1)  ){
22         merges = min(s1,s2);
23         mergee = max(e1,e2);
24 
25         vp[j].first = merges;
26         vp[j].second = mergee;
27         return 1;
28     }
29 
30     return 0;
31 }
32 
33 
34 int main()
35 {
36     cin >> T;
37 
38     for(int i =1 ;i <= T ;i ++){
39         cin >> vp[i].first;  cin >> vp[i].second;             
40     }
41     int mergeCount =0;
42     for(int i =1 ; i <=  T;i++){
43         for(int j = i+1;j<= T;j++){
44             //比较 i j
45             int res = Merge(i,j);
46             if(res){
47                mergeCount++;
48                break;
49             }
50         }
51     }
52 
53     cout << T - mergeCount << endl;
54 
55     return 0;
56 }
57 
58 作者:defddr
59 链接:https://www.acwing.com/solution/AcWing/content/1590/
60 来源:AcWing
61 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Code
复制代码

 

posted on   itdef  阅读(331)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2017-05-18 游戏脚本编程 文本token解析

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示