あなたは、つぶやきカウントクラスに次の2つの方法の実現をサポートすることができますTweetCounts
:
1。recordTweet(string tweetName, int time)
- ツイートの記録を掲載:ユーザー
tweetName
でtime
(で秒単位)は、時間のツイートを投稿しました。
2。getTweetCountsPerFrequency(string freq, string tweetName, int startTime, int endTime)
- リターン開始時刻から
startTime
(まで二時間の終わりに単位)endTime
(内秒の各内のユニット)のサブ * 分、* * *時間や一日の日* *(に応じてfreq
、ユーザが指定した)tweetName
ツイートの総数が投稿しました。 freq
値は常にされて分割 * 分、* とき 時間または一日 一日 1、指定したユーザー取得しtweetName
た時間間隔の数つぶやきを。- 第1の時間間隔から常にある
startTime
時間間隔ので、初め[startTime, startTime + delta*1>, [startTime + delta*1, startTime + delta*2>, [startTime + delta*2, startTime + delta*3>, ... , [startTime + delta*i, **min**(startTime + delta*(i+1), endTime + 1)>
ものでi
あり、delta
(に応じてfreq
非負の整数です)。
例:
输入:
["TweetCounts","recordTweet","recordTweet","recordTweet","getTweetCountsPerFrequency","getTweetCountsPerFrequency","recordTweet","getTweetCountsPerFrequency"]
[[],["tweet3",0],["tweet3",60],["tweet3",10],["minute","tweet3",0,59],["minute","tweet3",0,60],["tweet3",120],["hour","tweet3",0,210]]
输出:
[null,null,null,null,[2],[2,1],null,[4]]
解释:
TweetCounts tweetCounts = new TweetCounts();
tweetCounts.recordTweet("tweet3", 0);
tweetCounts.recordTweet("tweet3", 60);
tweetCounts.recordTweet("tweet3", 10); // "tweet3" 发布推文的时间分别是 0, 10 和 60 。
tweetCounts.getTweetCountsPerFrequency("minute", "tweet3", 0, 59); // 返回 [2]。统计频率是每分钟(60 秒),因此只有一个有效时间间隔 [0,60> - > 2 条推文。
tweetCounts.getTweetCountsPerFrequency("minute", "tweet3", 0, 60); // 返回 [2,1]。统计频率是每分钟(60 秒),因此有两个有效时间间隔 1) [0,60> - > 2 条推文,和 2) [60,61> - > 1 条推文。
tweetCounts.recordTweet("tweet3", 120); // "tweet3" 发布推文的时间分别是 0, 10, 60 和 120 。
tweetCounts.getTweetCountsPerFrequency("hour", "tweet3", 0, 210); // 返回 [4]。统计频率是每小时(3600 秒),因此只有一个有效时间间隔 [0,211> - > 4 条推文。
ヒント:
- 考慮に入れる
recordTweet
とgetTweetCountsPerFrequency
、最大で、10000
運営。 0 <= time, startTime, endTime <= 10^9
0 <= endTime - startTime <= 10^4
問題解決のためのアイデア
タイトルは比較的長いが、比較的簡単を通じて、動作するようにmap
レコードの配列、およびデータ挿入ソートまたはソートされていないことができたときに(ないソートの前で、それはソートする必要がある場合)の半分で、クエリ時間を選択しました。
class TweetCounts:
def __init__(self):
self.tweets = collections.defaultdict(list)
def recordTweet(self, tweetName: str, time: int) -> None:
bisect.insort_left(self.tweets[tweetName], time)
def getTweetCountsPerFrequency(self, freq: str, tweetName: str, startTime: int, endTime: int) -> List[int]:
delta = 1
if freq == 'minute':
delta = 60
elif freq == 'hour':
delta = 60 * 60
elif freq == 'day':
delta = 60 * 60 * 24
res = [0] * ((endTime - startTime) // delta + 1)
pos = bisect.bisect_left(self.tweets[tweetName], startTime)
while pos < len(self.tweets[tweetName]) and self.tweets[tweetName][pos] <= endTime:
res[(self.tweets[tweetName][pos] - startTime) // delta] += 1
pos += 1
return res
私は私に追加の質問の他の言語バージョンGitHubのLeetcode
ご質問がある場合は、私が指摘したいです!!!