引言:
给定 nn 个区间 [li,ri][li,ri],要求合并所有有交集的区间。
注意如果在端点处相交,也算有交集。
输出合并完成后的区间个数。
例如:[1,3][1,3] 和 [2,6][2,6] 可以合并为一个区间 [1,6][1,6]。
输入格式
第一行包含整数 nn。
接下来 nn 行,每行包含两个整数 ll 和 rr。
输出格式
共一行,包含一个整数,表示合并区间完成后的区间个数。
数据范围
1≤n≤1000001≤n≤100000,
−109≤li≤ri≤109
input:
5
1 2
2 4
5 6
7 8
7 9
output:
3
Accpeted Code:
import java.util.*;
import java.io.*;
public class Main{
static final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
static final BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));
static final int N = 100010;
static List<int[]> list = new ArrayList<>();
public static void main(String[] args) throws IOException{
int n = Integer.parseInt(reader.readLine());
while(n-- > 0){
String[] sArr = reader.readLine().split(" ");
int l = Integer.parseInt(sArr[0]) , r = Integer.parseInt(sArr[1]);
list.add(new int[]{l,r});
}
Collections.sort(list,(a,b) -> { return a[0] - b[0];});
int l = (int) -2e9 , r = (int) -2e9;
int ans = 0;
for(int[] tmp : list){
if(r < tmp[0]){
l = tmp[0];
r = tmp[1];
ans++;
}else{
r = Math.max(r,tmp[1]);
}
// log.write(Arrays.toString(tmp) + "\n");
}
log.write(ans + "");
reader.close();
log.flush();
log.close();
}
}