生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1348. 推文计数(哈希map+set)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
請你實現一個能夠支持以下兩種方法的推文計數類 TweetCounts:
recordTweet(string tweetName, int time)
- 記錄推文發布情況:用戶 tweetName 在 time(以 秒 為單位)時刻發布了一條推文。
getTweetCountsPerFrequency(string freq, string tweetName, int startTime, int endTime)
- 返回從開始時間 startTime(以 秒 為單位)到結束時間 endTime(以 秒 為單位)內,每 分 minute,時 hour 或者 日 day (取決于 freq)內指定用戶 tweetName 發布的推文總數。
- freq 的值始終為 分 minute,時 hour 或者 日 day 之一,表示獲取指定用戶 tweetName 發布推文次數的時間間隔。
- 第一個時間間隔始終從 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);
tweetCounts
.getTweetCountsPerFrequency("minute", "tweet3", 0, 59);
tweetCounts
.getTweetCountsPerFrequency("minute", "tweet3", 0, 60);
tweetCounts
.recordTweet("tweet3", 120);
tweetCounts
.getTweetCountsPerFrequency("hour", "tweet3", 0, 210);
提示:
同時考慮 recordTweet 和 getTweetCountsPerFrequency,最多有
10000 次操作。
0 <= time
, startTime
, endTime
<= 10^9
0 <= endTime
- startTime
<= 10^4
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/tweet-counts-per-frequency
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 用哈希map 存儲數據,key 是 tweetName;value 是set,存儲時間點
class TweetCounts {unordered_map
<string
,set
<int>> m
;
public:TweetCounts() { }void recordTweet(string tweetName
, int time
) {m
[tweetName
].insert(time
);}vector
<int> getTweetCountsPerFrequency(string freq
, string tweetName
, int startTime
, int endTime
) {int gap
;if(freq
== "minute")gap
= 60;else if(freq
== "hour")gap
= 3600;elsegap
= 3600*24;if(!m
.count(tweetName
))return {};vector
<int> ans
;int count
, end_t
;while(startTime
<= endTime
){count
= 0;end_t
= min(endTime
, startTime
+ gap
-1);auto beg
= m
[tweetName
].lower_bound(startTime
);auto end
= m
[tweetName
].upper_bound(end_t
);for(auto it
= beg
; it
!= end
; it
++){count
++;}ans
.push_back(count
);startTime
+= gap
;}return ans
;}
};
總結
以上是生活随笔為你收集整理的LeetCode 1348. 推文计数(哈希map+set)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。