questione non specifica se inizio e di fine indicati in coppie o separatamente. C'è un semplice algoritmo per casi meno semplici, quando vengono dati separatamente, qui. Quindi abbiamo tutte le volte in un unico elenco ma conserviamo le informazioni se inizia l'ora del lavoro o termina il lavoro.
ad esempio:
13:00 start
15:00 finish
8:30 start
10:00 finish
9:00 start
12:00 finish
quindi ordinare l'elenco per ora:
8:30 start
9:00 start
10:00 finish
12:00 finish
13:00 start
15:00 finish
di cui abbiamo bisogno di un contatore di posti di lavoro aperti e siamo in grado di elaborare l'elenco, incremento del contatore quando il tempo di avvio viene elaborata e contatore di decremento al termine del tempo di fine lavorazione; Se il contatore è 0 significa che entriamo in stato di inattività.
list.sort()
open_jobs = 0
state_changed_time = list[0].time;
max_idle_interval = -1;
max_not_idle_interval = -1;
for each (element in list)
{
if (element.type == start)
{
if(open_jobs == 0)
{
interval = element.time - state_changed_time;
if (interval > max_idle_interval) max_idle_interval = interval;
state_changed_time = element.time;
}
open_jobs +=1;
}
if (element.type == finish)
{
open_jobs -= 1;
if(open_jobs == 0)
{
interval = element.time - state_changed_time;
if (interval > max_not_idle_interval) max_not_idle_interval = interval;
state_changed_time = element.time;
}
}
}
che sto rimuovendo i tag di smistamento e Heapsort da questo problema, in quanto la questione non li coinvolgono direttamente. – templatetypedef