-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathCountStreamers.java
61 lines (52 loc) · 2.11 KB
/
CountStreamers.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package by.andd3dfx.common;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import static by.andd3dfx.common.CountStreamers.EventType.START;
import static by.andd3dfx.common.CountStreamers.EventType.STOP;
/**
* <pre>
* Ваша задача: посчитать максимальное количество пользователей,
* одновременно смотревших игровой стрим.
*
* Каждый пользователь подключался к стриму в какой-то момент времени t_in,
* и отключался в момент времени t_out – время измеряется в секундах (от 0 до 10^9).
* У каждого пользователя это время своё.
*
* Вам дан массив (неупорядоченный) из пар (t_in, t_out) – длина массива от 0 до 10^6.
* Требуется вывести число – максимальное количество пользователей,
* которые одновременно смотрели стрим.
* </pre>
*
* @see <a href="https://youtu.be/uMikT-xpE-w">Video solution</a>
*/
public class CountStreamers {
public static int count(int[][] times) {
var events = new ArrayList<EventItem>();
for (var time : times) {
events.add(new EventItem(time[0], START));
events.add(new EventItem(time[1], STOP));
}
Collections.sort(events, Comparator.comparingInt(EventItem::getTime));
var current = 0;
var max = 0;
for (var event : events) {
current += (event.eventType == EventType.START) ? +1 : -1;
if (current > max) {
max = current;
}
}
return max;
}
public enum EventType {
START, STOP
}
@Data
@AllArgsConstructor
public static class EventItem {
private int time;
private EventType eventType;
}
}