码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode/lintcode 题解] Amazon 面试题:迷你推特

时间:2020-12-23 12:31:01      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:des   solution   zhang   news   col   nod   ++   selected   container   

实现一个迷你的推特,支持下列几种方法
  1. ?postTweet(user_id, tweet_text).? 发布一条推特.
  2. ?getTimeline(user_id).? 获得给定用户最新发布的十条推特,按照发布时间从最近的到之前排序
  3. ?getNewsFeed(user_id).? 获得给定用户的朋友或者他自己发布的最新十条推特,从发布时间最近到之前排序
  4. ?follow(from_user_id, to_user_id).? from_user_id 关注 to_user_id.
  5. ?unfollow(from_user_id, to_user_id).? from_user_id 取消关注 to_user_id.
 
在线评测地址:领扣题库官网
 
样例 1:
题解
因为题目里涉及到对推文按照时间排序, 同时 Tweet 类本身不含时间信息, 所以我们需要额外地记录每条推文发出的时间.
可以定义一个类的静态变量作为计数器来实现.
然后分析我们需要的数据结构:
  • ?class Node {Tweet, int};? 对原有的Tweet类的扩展, 使其可以记录时间 (当然, 也可以用类的继承来实现)
  • ?map<int, vector<Node>>? 用户id到这个用户发送了的推文的映射
  • ?map<int, set<int>>? 用户id到这个用户关注的人的id的映射
然后对应每种方法的实现:
  • ?postTweet()? 直接添加到?map<int, vector<Node>>?中即可
  • ?getTimeline()? 根据?map<int, vector<Node>>?获得该用户的最新推文, 返回即可
  • ?getNewsFeed()? 同时用到上面定义的两个映射, 比较暴力的做法是获取这些用户的所有推文, 排序, 拿出前十个; 或者可以利用堆进行 "多路归并"
  • ?follow()??map<int, set<int>>? 中添加即可
  • ?unfollow()??map<int, set<int>>? 中删除即可
(本题解使用C++相关数据结构描述, 不过映射和集合在其他语言中也有对应的实现)
 
更多题解参考:九章官网solution
 

[leetcode/lintcode 题解] Amazon 面试题:迷你推特

标签:des   solution   zhang   news   col   nod   ++   selected   container   

原文地址:https://www.cnblogs.com/lintcode/p/14157027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!