题目链接
英文链接:https://leetcode.com/problems/design-twitter/
中文链接:https://leetcode-cn.com/problems/design-twitter/
题目详述
设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能:
- postTweet(userId, tweetId): 创建一条新的推文
- getNewsFeed(userId): 检索最近的十条推文。每个推文都必须是由此用户关注的人或者是用户自己发出的。推文必须按照时间顺序由最近的开始排序。
- follow(followerId, followeeId): 关注一个用户
- unfollow(followerId, followeeId): 取消关注一个用户
示例:
1 | Twitter twitter = new Twitter(); |
题目详解
- 首先构建一个类
Data
,包含id
、tweetId
两个字段,id
越大,推文越新。 - 用
Map<Integer, List<Data>> posts
表示从一个用户映射到他发布的推文列表。 - 用
Map<Integer, Set<Integer>> follows
表示从一个用户映射到他的关注列表。
对于以下操作:
postTweet(userId, tweetId)
,首先用posts
找到这个用户发布的推特列表,然后将tweetId
插入该列表中。getNewsFeed(userId)
,首先用follows
找到这个用户所有的关注,然后将他们发布的所有微博存入一个优先队列(可以采用大顶堆,也可以采用小顶堆,采用小顶堆取出时要逆序),最后取出最近的十条推文。follow(followerId, followeeId)
,首先用follows
找到followerId
的关注列表,然后将followeeId
插入该列表。unfollow(followerId, followeeId)
,首先用follows
找到followerId
的关注列表,然后将followeeId
从该列表中删除。
1 | public class LeetCode_00355 { |