给定 nn 个区间 [li,ri][li,ri],要求合并全部有交集的区间。java
注意若是在端点处相交,也算有交集。node
输出合并完成后的区间个数。ide
例如:[1,3]和[2,6]能够合并为一个区间[1,6]。this
第一行包含整数n。spa
接下来n行,每行包含两个整数 l 和 r。code
共一行,包含一个整数,表示合并区间完成后的区间个数。xml
1≤n≤1000001≤n≤100000,
−109≤li≤ri≤109−109≤li≤ri≤109blog
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); } }