どのように実行することができ、参加者の最大数を見つけるには?

パンダ:

私は、以下の記述がある質問を解決しようとしています:

一度に一人は、ステージと到着時刻に実行することができ、各参加者の持続時間は、アレイの形で与えられます。実行することができ、参加者の最大数を検索します。

例:

到着時間:[1,3,3,5,7]

期間:[2,2,1,2,1]

答えは1-3として、4になります。3-5または3-4。5-7。7-8

だから、このことから、私は、各参加者の退出時間を見つけることができます。重複がタイミングであった場合にどのように私は、可能なイベントの最大数を見つけるのですか。

私が試してみましたコードは次のとおりです。

int count = 1;

for(int i=0;i<entry.size()-1;i++) {
    if(entry.get(i) < exit.get(i+1)) {
        count++;
    }
}

return count;

私が到着+期間を使用して出口リストを見つけましたが、多くのテストが失敗しています。上記の例では渡しますが、重複した時間が可能に複数の参加者を有することができる事例があるかもしれません。

私は続行する方法を見つけ出すことができないのです。

Conffusion:

新しいテストケースのように更新答えは、それは、彼らが同じ到着時間があれば演奏を並べ替えることができます明らかにされている追加されました。第2更新:各パフォーマー(到着+持続時間)の終了時にソート入力。現在のパフォーマーのendTimeはを保管してください。唯一のパフォーマーは、現在の演奏終了後に到着する実行することができます。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class LifeGig {

    public static class Performer {
        int arrival, duration;

        Performer(int arrival, int duration) {
            this.arrival = arrival;
            this.duration = duration;
        }

        @Override
        public String toString() {
            return "Performer [arrival=" + arrival + ", duration=" + duration + "]";
        }
    }

    public List<Performer> program(int[] entry,int[] duration)
    {
        List<Performer> performers=new ArrayList<>();
        for(int i=0;i<entry.length;i++)
        {
            performers.add(new Performer(entry[i],duration[i]));
        }
        Collections.sort(performers, new Comparator<Performer>() {
            @Override
            public int compare(Performer p1, Performer p2) {
                return Integer.compare(p1.arrival+p1.duration, p2.arrival+p2.duration);
            }
        });
        List<Performer> festival=new ArrayList<>();
        System.out.println(performers);
        int currentTime = 1;
        for (Performer p:performers) {
            if (p.arrival >= currentTime) {
                currentTime = p.arrival+p.duration;
                festival.add(p);
            }
        }
        return festival;
    }
    public static void test1()
    {
        int[] entry = new int[] {1,3,3,5,7};
        int[] duration = new int[] {2,2,1,2,1};
        List<Performer> festival=new LifeGig().program(entry,duration);
        System.out.println("Count (Expected=4): " + festival.size());
        System.out.println("lineup:"+festival);
    }

    public static void test2()
    {
        int[] entry = new int[] {1, 1, 1, 1, 4};
        int[] duration = new int[] {10, 3, 6, 4, 2};
        List<Performer> festival=new LifeGig().program(entry,duration);
        System.out.println("Count (Expected=2): " + festival.size());
        System.out.println("lineup:"+festival);
    }
    public static void test3()
    {
        int[] entry = new int[] {1,2,3,4};
        int[] duration = new int[] {10, 1,1,1,};
        List<Performer> festival=new LifeGig().program(entry,duration);
        System.out.println("Count (Expected=3): " + festival.size());
        System.out.println("lineup:"+festival);

    }

    public static void main(String[] args) {
        test1();
        test2();
        test3();
    }

}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=202646&siteId=1