您的位置:首页 > 其它

重叠区间个数(算法)

2015-08-31 16:58 155 查看
给定一个可能重叠的区间,找出重叠区间的个数:

区间定义如下:

class Interval
{
int start;
int end;
Interval(int a,int b)
{
start = a;
end = b;
}
};
举例如下:

输入:【1,5】 【10,15】 【5,10】 【20,30】

输出: 3

本题对面试者考察的是对复杂数据结构排序的能力,解题思路:先对以上区间排序再遍历,发现起点就flag 加1,反之减1,求出最大的flag即为重叠区间个数;

class Point implements Comparable<Point>
{
int value;
int type;
Point(int v,int t)
{
value = v;
type = t;
}
pulbic 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;
int count = 1;
if(A == NULL || A.length == 1)	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[2*i + 1] = new Point(a[i].end,1);
}
Collections.sort(points);
for(int i = 0; i < points.length; i++)
{
if(points[i].type == 0)
{
count++;
max = Math.max(max,count);
}
else
{
count--;
}
}
return max;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: