Advertisement
ibragimova_mariam

Task events temp

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