問題:重複セクションの最大数を識別するために、おそらく重複する複数のセクションを与えられます。次のように間隔が定義されています。
public class Interval{
int start; //起点
int end; //止点
Interval(int a,int b){
start=a;
end=b;
}
}
アイデア:境界ゾーンは、すべての点をソートするためにスキャンの結果をソートするために、ポイントに換算されます。起源に直面し、プラスの重複の数、重複の最大数を記録した場合、死、オーバーラップ数マイナス1に遭遇したとき。
Javaコード:
class Point implements Comparable<Point>{
int value;
int type;
Point(int v,int t){
value=v;
type=t;
}
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[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;
}