问题描述

解题思路
- 最开始我想用散列桶来解决这个题,但是排序那块使用起来不方便,最终采用了二维数组来实现
- 我们根据左侧端点进行排序,如果当前区间右端点大于等于下一个区间的左端点,说明这两个区间可以合并
- 我们还需要判断一下是否需要更新下一个区间的右边界【如果大于等于当前区间的右边界就不用更新】

- 相邻两个区间分为以下几种情况:
- 第二个区间被第一个区间完全包含
- 第二个区间与第一个区间存在交集
- 两个区间不存在交集
代码部分
import java.util.*;
public class Main{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int [][] arr = new int[n][2];
for(int i = 0; i < n; i++){
int l = sc.nextInt();
int r = sc.nextInt();
arr[i][0] = l;
arr[i][1] = r;
}
int res = n;
Arrays.sort(arr, (a, b) -> a[0] - b[0]);
for(int i = 0; i < n - 1; i++){
if(arr[i][1] >= arr[i + 1][0]){
res--;
arr[i + 1][1] = Math.max(arr[i][1], arr[i + 1][1]);
}
}
System.out.println(res);
}
}