¿Cómo encontrar el número máximo de participantes que puede realizar?

Panda:

Estoy tratando de resolver un problema que tiene la siguiente descripción:

En un momento sólo una persona puede realizar en el tiempo de la etapa y de llegada y la duración de cada participante se da en la forma de una matriz. Encuentra el número máximo de participantes que pueden realizar.

Ejemplo:

hora de llegada: [1,3,3,5,7]

duración: [2,2,1,2,1]

respuesta sería 4, como 1-3; 3-5 o 3-4; 5-7; 7-8

Así que de esto, puedo encontrar el tiempo de salida de cada participante. ¿Cómo encuentro el número máximo de eventos posibles, cuando hay superposición en los tiempos.

El código que he probado es:

int count = 1;

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

return count;

He encontrado la lista de salida usando la llegada + duración, pero muchas pruebas están fallando. El ejemplo anterior pasa, pero puede haber casos en donde el tiempo de superposición puede tener posible más participantes.

No soy capaz de encontrar la manera de proceder.

Conffusion:

se añadió respuesta actualizada como un nuevo caso de prueba que se indicaba claramente los artistas pueden ser reordenados si tienen la misma hora de llegada. 2º día: Ordenar la entrada de la hora final de cada intérprete (llegada + duración). Mantener el tiempo del fin del intérprete actual. Sólo los artistas pueden realizar que llegan después del final del intérprete actual.

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();
    }

}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=202649&siteId=1
Recomendado
Clasificación