355-设计推特-leetcode-设计

  #include <vector> #include <unordered_set> #include <unordered_map> #include <list> using namespace std; class Twitter { struct Node{  unordered_set<int> followee;  list<int> tweet; }; int recentMax, time;  unordered_map<int, int> tweetTime;  unordered_map<int, Node> user; public:  Twitter() { time = 0; recentMax = 10; tweetTime.clear(); user.clear(); } void init(int userId){ user[userId].followee.clear(); user[userId].tweet.clear(); }  void postTweet(int userId, int tweetId) { if(user.find(userId) == user.end()){ init(userId); } if(user[userId].tweet.size() == recentMax){ user[userId].tweet.pop_back(); } user[userId].tweet.push_front(tweetId);  tweetTime[tweetId] = time++; }  vector<int> getNewsFeed(int userId) { if(user.find(userId) == user.end()) return {}; vector<int> ans; ans.clear(); for (list<int>::iterator it = user[userId].tweet.begin(); it != user[userId].tweet.end(); ++it) { ans.emplace_back(*it);  }  for(int followeeId : user[userId].followee){ if(followeeId == userId) continue; vector<int> res; res.clear(); list<int> ::iterator it = user[followeeId].tweet.begin(); int i = 0; while(i < ans.size() && it != user[followeeId].tweet.end()){ if(tweetTime[(*it)] > tweetTime[ans[i]]){ res.emplace_back(*it); ++it; } else{ res.emplace_back(ans[i]); ++i; } if(res.size() == recentMax) break; } for (; i < (int)ans.size() && (int)res.size() < recentMax; ++i) res.emplace_back(ans[i]); for (; it != user[followeeId].tweet.end() && (int)res.size() < recentMax; ++it) res.emplace_back(*it); ans.assign(res.begin(), res.end());  } return ans; }  void follow(int followerId, int followeeId) { if(user.find(followerId) == user.end()) init(followerId); if(user.find(followeeId) == user.end()) init(followeeId); user[followerId].followee.insert(followeeId); }  void unfollow(int followerId, int followeeId) { user[followerId].followee.erase(followeeId); } };   
本网页由快兔兔AI采集器生成,目的为演示采集效果,若侵权请及时联系删除。

原文链接:https://bbs.csdn.net/skill/algorithm/algorithm-49a663e34f3b4ac9add98217d48818d5

更多内容