1
var TweetCounts = function () {5
TweetCounts.prototype.recordTweet = function (tweetName, time) {6
if (!this.map.has(tweetName)) this.map.set(tweetName, []);7
this.map.get(tweetName).push(time);10
TweetCounts.prototype.getTweetCountsPerFrequency = function (16
if (!this.map.has(tweetName)) return [];18
const tweets = this.map.get(tweetName);19
const buckets = createBuckets(freq, startTime, endTime);21
for (let i = 0; i < tweets.length; i++) {22
const tweetTime = tweets[i];25
let right = buckets.length - 1;27
while (left <= right) {28
const mid = (left + right) >> 1;29
const [startTime, endTime, count] = buckets[mid];31
if (startTime <= tweetTime && tweetTime <= endTime) {32
buckets[mid][2] = count + 1;36
if (endTime < tweetTime) left = mid + 1;43
for (let i = 0; i < buckets.length; i++) {44
res.push(buckets[i][2]);49
function createBuckets(freq, startTime, endTime) {50
const chunks = { minute: 60, hour: 3600, day: 86400 };53
let start = startTime;55
while (start <= endTime) {56
const end = Math.min(start + chunks[freq] - 1, endTime);57
buckets.push([start, end, 0]);