1
class TweetCounts {
2
Map<String, List<Integer>> map;
3

4
public TweetCounts() {
5
map = new HashMap<>();
6
}
7

8
public void recordTweet(String tweetName, int time) {
9
map.computeIfAbsent(tweetName, v -> new ArrayList<>()).add(time);
10
}
11

12
public List<Integer> getTweetCountsPerFrequency(
13
String freq, String tweetName, int startTime, int endTime) {
14
List<Integer> res = new ArrayList<>();
15
if (map.containsKey(tweetName)) {
16
Collections.sort(map.get(tweetName));
17
while (startTime <= endTime) {
18
int interval = Freq.valueOf(freq).getVal();
19
int end =
20
Math.min(startTime + interval - 1, endTime); // need this to handle the last interval
21
res.add(getFreq(map.get(tweetName), startTime, end));
22
startTime =
23
end + 1; // ex: for minute, the interval is 60 so our end is 59. The next startTime is
24
// end+1
25
}
26
}
27
return res;
28
}
29

30
public int getFreq(List<Integer> list, int start, int end) {
31
int st = Collections.binarySearch(list, start);
32
if (st < 0) {
33
st = (st + 1) * -1; // our exact start time might not be in the list, to get the 1st timestamp
34
// greater than start
35
}
36
int en = Collections.binarySearch(list, end);
37
if (en < 0) {
38
en =
39
(en + 2)
40
* -1; // our exact end time might not be in the list, to get the last timestamp just
41
// smaller than end
42
}
43

44
return en - st + 1; // the freq count
45
}
46
}
47

48
enum Freq {
49
minute(60),
50
hour(3600),
51
day(86400);
52
Map<Freq, Integer> map = new HashMap<>();
53

54
Freq(int val) {
55
map.put(this, val);
56
}
57

58
public int getVal() {
59
return map.get(this);
60
}
61
}
62

63
/**
64
* Your TweetCounts object will be instantiated and called as such: TweetCounts obj = new
65
* TweetCounts(); obj.recordTweet(tweetName,time); List<Integer> param_2 =
66
* obj.getTweetCountsPerFrequency(freq,tweetName,startTime,endTime);
67
*/

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0