给定 nn 个区间 [li,ri][li,ri],要求合并所有有交集的区间。
注意如果在端点处相交,也算有交集。
输出合并完成后的区间个数。
例如:[1,3]和[2,6]可以合并为一个区间[1,6]。
输入格式
第一行包含整数n。
接下来n行,每行包含两个整数 l 和 r。
输出格式
共一行,包含一个整数,表示合并区间完成后的区间个数。
数据范围
1≤n≤1000001≤n≤100000,
−109≤li≤ri≤109−109≤li≤ri≤109
输入样例:
5
1 2
2 4
5 6
7 8
7 9
输出样例:
3
思路:先按区间左端点排序;下一个区间和上一个区间有三种情况,在区间里,有交集,无交集,如下图
代码:
import java.util.*; class node implements Comparable<node>{ int l; int r; @Override public int compareTo(node o) { return this.l-o.l; } } public class Main{ static final int max=100005; static node p[]=new node[max]; public static void main(String[] args) { Scanner scan=new Scanner(System.in); int n=scan.nextInt(); for(int i=0;i<n;i++){ p[i]=new node(); p[i].l=scan.nextInt(); p[i].r=scan.nextInt(); } Arrays.sort(p,0,n); int res=1,end=p[0].r; for(int i=1;i<n;i++){ if(p[i].l<=end) end=Math.max(end, p[i].r); else { res++; end=p[i].r; } } System.out.println(res); } }