Advertisement
ibragimova_mariam

Task Y eventsStore

Jan 11th, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. package events;
  2.  
  3. import java.util.*;
  4.  
  5. public class EventsStoreImpl implements EventsStore {
  6.  
  7. Map<Integer, Set<Integer>> usersByTime;
  8.  
  9. public EventsStoreImpl()
  10. {
  11. usersByTime = new TreeMap<>();
  12. }
  13.  
  14.  
  15. @Override
  16. public void registerEvent(int userId, int time) {
  17.  
  18. Set<Integer> s = usersByTime.getOrDefault(time, new HashSet<>());
  19. if(s == null)
  20. s = new HashSet<>();
  21.  
  22. s.add(userId);
  23. usersByTime.put(time, s);
  24.  
  25. int startTime = time - FIVE_MINUTES;
  26. for (Iterator<Map.Entry<Integer, Set<Integer>>> it = usersByTime.entrySet().iterator(); it.hasNext(); )
  27. {
  28.  
  29. if (startTime > it.next().getKey())
  30. {
  31. it.remove();
  32. }
  33. else
  34. break;
  35. }
  36.  
  37. }
  38.  
  39. @Override
  40. public int queryCountOfUsersWithNEventsInLast5Minutes(int n, int time) {
  41. int startTime = time - FIVE_MINUTES;
  42. Map<Integer, Integer> users = new HashMap<>();
  43. for (Map.Entry<Integer, Set<Integer>> e : usersByTime.entrySet())
  44. {
  45. if (startTime <= e.getKey())
  46. {
  47. for (Integer user : e.getValue())
  48. {
  49. int count = users.getOrDefault(user, 0);
  50. count++;
  51. users.put(user, count);
  52. }
  53. }
  54. }
  55.  
  56. Set<Integer> ans = new HashSet<>();
  57. for (Map.Entry<Integer, Integer> e : users.entrySet())
  58. {
  59. if (e.getValue() == n)
  60. {
  61. ans.add(e.getKey());
  62. }
  63. }
  64. return ans.size();
  65. }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement