Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package events;
- import java.util.*;
- public class EventsStoreImpl implements EventsStore {
- Map<Integer, Set<Integer>> usersByTime;
- Map<Integer, Integer> users;
- public EventsStoreImpl()
- {
- usersByTime = new TreeMap<>();
- users = new HashMap<>();
- }
- @Override
- public void registerEvent(int userId, int time) {
- Set<Integer> s = usersByTime.getOrDefault(time, new HashSet<>());
- if(s == null)
- s = new HashSet<>();
- s.add(userId);
- usersByTime.put(time, s);
- int startTime = time - FIVE_MINUTES;
- for (Iterator<Map.Entry<Integer, Set<Integer>>> it = usersByTime.entrySet().iterator(); it.hasNext(); )
- {
- Map.Entry<Integer, Set<Integer>> e = it.next();
- if (startTime > e.getKey())
- {
- it.remove();
- }
- else
- {
- for (Integer user : e.getValue())
- {
- int count = users.getOrDefault(user, 0);
- count++;
- users.put(user, count);
- }
- }
- }
- }
- @Override
- public int queryCountOfUsersWithNEventsInLast5Minutes(int n, int time) {
- int startTime = time - FIVE_MINUTES;
- Map<Integer, Integer> users = new HashMap<>();
- for (Map.Entry<Integer, Set<Integer>> e : usersByTime.entrySet())
- {
- if (startTime <= e.getKey())
- {
- for (Integer user : e.getValue())
- {
- int count = users.getOrDefault(user, 0);
- count++;
- users.put(user, count);
- }
- }
- }
- int ans = 0;
- for (Map.Entry<Integer, Integer> e : users.entrySet())
- {
- if (e.getValue() == n)
- {
- ans++;
- }
- }
- return ans;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement