410. Design a Simplified Twitter

Fulltime8/23/2025
Amazon

Problem Description

Design a simplified version of Twitter where users can post tweets, follow/unfollow other users, and retrieve the most recent tweets in their news feed. Implement the following functionalities: 1. `postTweet(userId, tweetId)`: Compose a new tweet with ID `tweetId` by user `userId`. Each tweet must have a unique ID. 2. `getNewsFeed(userId)`: Retrieve the most recent 10 tweets in the user's news feed. The news feed includes the user's own tweets and tweets from users they follow. If there are fewer than 10 tweets available, return all available tweets. The tweets should be ordered from most recent to least recent. 3. `follow(followerId, followeeId)`: The user with ID `followerId` starts following the user with ID `followeeId`. 4. `unfollow(followerId, followeeId)`: The user with ID `followerId` stops following the user with ID `followeeId`. Assume that all user IDs and tweet IDs are integers. Implement the `Twitter` class with the following methods: * `Twitter()`: Initializes your twitter object. * `void postTweet(int userId, int tweetId)`: Composes a new tweet. * `List<Integer> getNewsFeed(int userId)`: Retrieves the most recent 10 tweet ids in the user's feed. Each item in the news feed must be a tweet id. * `void follow(int followerId, int followeeId)`: The user with ID followerId starts following the user with ID followeeId. * `void unfollow(int followerId, int followeeId)`: The user with ID followerId stops following the user with ID followeeId.

Examples

Example 1:
Input: Twitter twitter = new Twitter(); twitter.postTweet(1, 5); twitter.getNewsFeed(1); twitter.follow(1, 2); twitter.postTweet(2, 6); twitter.getNewsFeed(1); twitter.unfollow(1, 2); twitter.getNewsFeed(1);
Output: [null, null, [5], null, null, [6, 5], null, [5]]
Explanation: Twitter twitter = new Twitter(); twitter.postTweet(1, 5); // User 1 posts a new tweet (id = 5) twitter.getNewsFeed(1); // User 1's news feed should return a list with 1 tweet id -> [5] twitter.follow(1, 2); // User 1 follows user 2 twitter.postTweet(2, 6); // User 2 posts a new tweet (id = 6) twitter.getNewsFeed(1); // 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.unfollow(1, 2); // User 1 unfollows user 2 twitter.getNewsFeed(1); // User 1's news feed should return a list with 1 tweet id -> [5], since user 1 is no longer following user 2.
Example 2:
Input: Twitter twitter = new Twitter(); twitter.postTweet(1, 5); twitter.postTweet(1, 3); twitter.postTweet(1, 101); twitter.postTweet(1, 13); twitter.postTweet(1, 10); twitter.postTweet(1, 2); twitter.postTweet(1, 94); twitter.postTweet(1, 505); twitter.postTweet(1, 333); twitter.postTweet(1, 22); twitter.postTweet(1, 11); twitter.getNewsFeed(1);
Output: [null, null, null, null, null, null, null, null, null, null, null, [11, 22, 333, 505, 94, 2, 10, 13, 101, 3]]
Explanation: Demonstrates retrieving the 10 most recent tweets when there are more than 10 tweets available.
Example 3:
Input: Twitter twitter = new Twitter(); twitter.getNewsFeed(1);
Output: [null, []]
Explanation: Demonstrates the case where a user has no tweets and follows no one.

Constraints

  • 1 ≤ userId, followerId, followeeId ≤ 500
  • 0 ≤ tweetId ≤ 10000
  • All the tweets have unique IDs.
  • At most 500 calls will be made to postTweet, getNewsFeed, follow, and unfollow.
  • The number of tweets in the news feed will not exceed 10.