先把数据按照左值小的,右值大的排序,然后再遍历整个数组。如果两个值对(a,b),(c,d),如果a<=b
&&b>=d那么对于(a,b)来说,(c,d)就可以被合并,如果b
(a,d),如果c>b那么就意味着一个区间不能表示(a,b)和(c,d),必须要用两个区间来表示。遍历
一遍数组就行了。
import java.util.*;
public class Main{
static class Pair implements Comparable{
public int a;
public int b;
public Pair(int a,int b){
this.a=a;
this.b=b;
}
@Override
public int compareTo(Pair p){
if(a==p.a) return p.b-b;
else return a-p.a;
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
Pair[] ps=new Pair[n];
for(int i=0;i
int k=sc.nextInt();
int l=sc.nextInt();
ps[i]=new Pair(k,l);
}
Arrays.sort(ps);
/*for(int i=0;i
System.out.println(ps[i].a+" "+ps[i].b);
}*/
List result=new ArrayList<>();
Pair now=ps[0];
for(int i=1;i
if(now.a<=ps[i].a&&now.b>=ps[i].b){
continue;
}else if(ps[i].a>now.b){
result.add(now);
now=ps[i];
}
else now.b=ps[i].b;
}
result.add(now);
for(Pair p:result){
System.out.println(p.a+" "+p.b);
}
sc.close();
}
}