4

LeetCode 第355题 Design Twitter

 3 years ago
source link: https://codechina.org/2019/08/leetcode-355-design-twitter/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

来源: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来保存关注关系。

1-2.png

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

2-2-1024x520.png

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

3-1.png

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK