オーバーラップ区間の最大数

問題:重複セクションの最大数を識別するために、おそらく重複する複数のセクションを与えられます。次のように間隔が定義されています。

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;
    }
公開された18元の記事 ウォンの賞賛0 ビュー673

おすすめ

転載: blog.csdn.net/qq_42060170/article/details/104241823