题目:给定多个可能的重叠的区间,找出重叠区间的个数。
伪代码:
区间的定义如下:
class Interval{
int start; //起点
int end; //止点
Interval (int a,int b){
start =a;
end = b;
}
}
首先,要定义区间的类,实现Comparable接口,含有起点与止点的值和类型,还要重写用于排序的compareTo函数。
class Point implements Comparable<Point>{
int value;//数值
int type;//点的类型,0为起点,1为止点
Point (int v,int t){
value = v;
type = t;
}
//还需要实现compareTo函数,以便排序
public int compareTo(Point p){
if (this.value == p.value){
return 0;
}else if (this.value > p.value){
return 1;
}else {
return -1;
}
}
}
其次,区间转换为点,并将点排序,然后统计重叠的个数。
int getOverlappingCount(Interval[] A){
int max =0,count = 1;
if (A == null || A.length == 0) return max;
Point [] points = new Point[A.length*2];
for (int i=0;i<A.length;i++){
//转为可排序的点
points[2*i] = new Point(A[i].start,0);
points[