- Notifications
You must be signed in to change notification settings - Fork 1.8k
/
Copy pathTT1.java
80 lines (61 loc) · 2.36 KB
/
TT1.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
importjava.util.*;
publicclassTT1 {
enumFrequency {
MINUTE, HOUR, DAY
}
privateMap<String, TreeMap<Long, Integer>> tweets;
publicTT1() {
tweets = newHashMap<>();
}
publicvoidrecordTweet(StringtweetName, longtime) {
tweets.putIfAbsent(tweetName, newTreeMap<>());
TreeMap<Long, Integer> times = tweets.get(tweetName);
times.put(time, times.getOrDefault(time, 0) + 1);
}
publiclong[] getTweetCountsPerFrequency(Frequencyfreq, StringtweetName, longstartTime, longendTime) {
TreeMap<Long, Integer> times = tweets.get(tweetName);
longdiff = endTime - startTime;
longdelta = getDelta(freq);
long[] result = newlong[(int) (diff / delta) + 1];
longstartInterval = startTime, endInterval = startInterval + delta;
intidx = 0;
while (startInterval <= endTime) {
SortedMap<Long, Integer> subMap = times.subMap(startInterval, Math.min(endInterval, endTime + 1));
longcount = 0;
for (longtime : subMap.keySet()) {
count += subMap.get(time);
}
result[idx] = count;
++idx;
startInterval += delta;
endInterval += delta;
}
returnresult;
}
privatelonggetDelta(Frequencyf) {
if (Frequency.MINUTE == f) {
return60 * 1000;
} elseif (Frequency.HOUR == f) {
return60 * 60 * 1000;
} elseif (Frequency.DAY == f) {
return60 * 60 * 24 * 1000;
} else {
return0L;
}
}
publicstaticvoidmain(String[] args) {
TT1tweetCounts = newTT1();
tweetCounts.recordTweet("tweet3", 0);
tweetCounts.recordTweet("tweet3", 60000);
tweetCounts.recordTweet("tweet3", 10000);
tweetCounts.recordTweet("tweet3", 10000);
System.out
.println(Arrays.toString(tweetCounts.getTweetCountsPerFrequency(Frequency.MINUTE, "tweet3", 0, 59000)));
System.out
.println(Arrays.toString(tweetCounts.getTweetCountsPerFrequency(Frequency.MINUTE, "tweet3", 0, 60000)));
tweetCounts.recordTweet("tweet3", 120000);
System.out
.println(Arrays.toString(tweetCounts.getTweetCountsPerFrequency(Frequency.HOUR, "tweet3", 0, 210000)));
return;
}
}