AcWing 803. 區間合併

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

題目描述
給定n個區間[l, r]。算法

合併全部有交集的區間。ide

輸出合併完成後的區間個數。spa

例如:[1,3]和[2,6]能夠合併爲一個區間[1,6]。code

輸入格式
第一行包含整數n。blog

接下來n行,每行包含兩個整數 l 和 r。ci

輸出格式
共一行,包含一個整數,表示合併區間完成後的區間個數。get

樣例
輸入樣例:
5
1 2
2 4
5 6
7 8
7 9
輸出樣例:
3it

 

算法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 Aendio

可是代碼能夠歸爲兩種狀況判斷

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
相關文章
相關標籤/搜索