重叠区间的个数

来源:互联网 发布:如何用java做网站 编辑:程序博客网 时间:2024/04/30 00:59

给定多个可能重合的区间,找出重叠区间的个数。

题解:

我们首先根据区间点的不同类型进行分类,分成start和end点。然后我们根据这些start和end节点的大小来排序,可以用Comparator接口,重写其compareTo方法。那么将节点新生成一个Point类。当碰到起点的时候,重叠个数加1,并且记录重叠个数的最大值;否则当遇到结束点时,重叠个数减1.

代码如下:

class Interval{int start;int end;Interval(int a,int b){start = a;end = b;}}class Point{int value;int type;Point(int v,int t){this.value = v;this.type = t;}}class Com implements Comparator<Point>{public int compare(Point p1,Point p2)   //这个方法是看这个Point类中的value值{if(p1.value == p2.value)return 0;else if(p1.value > p2.value)   //如果前面那一个大于后面那一个,那么就要交换return 1;else return -1;}}public class getOverlappingCount {public static int GetOverLappingCount(Interval[] A){int max = 0,count = 1;    //这里count从1开始是因为计算的是重叠的区间,等于重叠区间个数加1if(A == null || A.length == 0)return max;ArrayList<Point> list = new ArrayList<Point>();for(int i = 0; i < A.length; i++){list.add(new Point(A[i].start,0));list.add(new Point(A[i].end,1)); }Collections.sort(list,new Com());for(int i = 0; i < list.size(); i++){if(list.get(i).type == 0){count++;if(count > 0){max = Math.max(count, max);}}elsecount--;//System.out.println(count + " " + max);}return max;}}


0 0
原创粉丝点击