LeetCode 第355题 Design Twitter

来源:https://leetcode.com/problems/design-twitter/

题目:设计一个Twitter

设计一个简单版本的Twitter,用户可以发推,可以关注和取关其他用户,可以显示用户时间线的最近10条推。

你的设计必须支持以下的方法:

  1. postTweet(userId, tweetId): 发新推
  2. getNewsFeed(userId): 获取该用户时间线上的最近10条推。时间线包含了他自己发的推和他关注的用户发的推。这些推必须按照时间顺序排列。
  3. follow(followerId, followeeId): 关注一个用户。
  4. unfollow(followerId, followeeId): 取关一个用户。

Example:

Twitter twitter = new Twitter();

// User 1 posts a new tweet (id = 5).
twitter.postTweet(1, 5);

// User 1's news feed should return a list with 1 tweet id -> [5].
twitter.getNewsFeed(1);

// User 1 follows user 2.
twitter.follow(1, 2);

// User 2 posts a new tweet (id = 6).
twitter.postTweet(2, 6);

// User 1's news feed should return a list with 2 tweet ids -> [6, 5].
// Tweet id 6 should precede tweet id 5 because it is posted after tweet id 5.
twitter.getNewsFeed(1);

// User 1 unfollows user 2.
twitter.unfollow(1, 2);

// User 1's news feed should return a list with 1 tweet id -> [5],
// since user 1 is no longer following user 2.
twitter.getNewsFeed(1);

我的实现很简单。效率一般。我们用一个数字数组的List来保存发的推。用一个hashmap来保存关注关系。

foMap的key是用户,value是用户关注的名单用hashset来保存。关注和取关的方法都很简单。

然后,我们取的信息流,就是遍历推列表,然后看是否是我们自己发的,或者是我们关注的人发的。够了10个就退出。

Github:https://github.com/tinyfool/leetcode/tree/master/src/p0355

本题属于哈希表类题目,想了解更多关于哈希表的题目,可以参看哈希表专题

打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据