"content":"<p>Design a simplified version of Twitter where users can post tweets, follow/unfollow another user, and is able to see the <code>10</code> most recent tweets in the user's news feed.</p>\n\n<p>Implement the <code>Twitter</code> class:</p>\n\n<ul>\n\t<li><code>Twitter()</code> Initializes your twitter object.</li>\n\t<li><code>void postTweet(int userId, int tweetId)</code> Composes a new tweet with ID <code>tweetId</code> by the user <code>userId</code>. Each call to this function will be made with a unique <code>tweetId</code>.</li>\n\t<li><code>List<Integer> getNewsFeed(int userId)</code> Retrieves the <code>10</code> most recent tweet IDs in the user's news feed. Each item in the news feed must be posted by users who the user followed or by the user themself. Tweets must be <strong>ordered from most recent to least recent</strong>.</li>\n\t<li><code>void follow(int followerId, int followeeId)</code> The user with ID <code>followerId</code> started following the user with ID <code>followeeId</code>.</li>\n\t<li><code>void unfollow(int followerId, int followeeId)</code> The user with ID <code>followerId</code> started unfollowing the user with ID <code>followeeId</code>.</li>\n</ul>\n\n<p> </p>\n<p><strong>Example 1:</strong></p>\n\n<pre>\n<strong>Input</strong>\n["Twitter", "postTweet", "getNewsFeed", "follow", "postTweet", "getNewsFeed", "unfollow", "getNewsFeed"]\n[[], [1, 5], [1], [1, 2], [2, 6], [1], [1, 2], [1]]\n<strong>Output</strong>\n[null, null, [5], null, null, [6, 5], null, [5]]\n\n<strong>Explanation</strong>\nTwitter twitter = new Twitter();\ntwitter.postTweet(1, 5); // User 1 posts a new tweet (id = 5).\ntwitter.getNewsFeed(1); // User 1's news feed should return a list with 1 tweet id -> [5]. return [5]\ntwitter.follow(1, 2); // User 1 follows user 2.\ntwitter.postTweet(2, 6); // User 2 posts a new tweet (id = 6).\ntwitter.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.\ntwitter.unfollow(1, 2); // User 1 unfollows user 2.\ntwitter.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.\n</pre>\n\n<p> </p>\n<p><strong>Constraints:</strong></p>\n\n<ul>\n\t<li><code>1 <= userId, followerId, followeeId <= 500</code></li>\n\t<li><code>0 <= tweetId <= 10<sup>4</sup></code></li>\n\t<li>All the tweets have <strong>unique</strong> IDs.</li>\n\t<li>At most <code>3 * 10<sup>4</sup></code> calls will be made to <code>postTweet</code>, <code>getNewsFeed</code>, <code>follow</code>, and <code>unfollow</code>.</li>\n</ul>\n",
"code":"class Twitter {\npublic:\n Twitter() {\n \n }\n \n void postTweet(int userId, int tweetId) {\n \n }\n \n vector<int> getNewsFeed(int userId) {\n \n }\n \n void follow(int followerId, int followeeId) {\n \n }\n \n void unfollow(int followerId, int followeeId) {\n \n }\n};\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * Twitter* obj = new Twitter();\n * obj->postTweet(userId,tweetId);\n * vector<int> param_2 = obj->getNewsFeed(userId);\n * obj->follow(followerId,followeeId);\n * obj->unfollow(followerId,followeeId);\n */",
"__typename":"CodeSnippetNode"
},
{
"lang":"Java",
"langSlug":"java",
"code":"class Twitter {\n\n public Twitter() {\n \n }\n \n public void postTweet(int userId, int tweetId) {\n \n }\n \n public List<Integer> getNewsFeed(int userId) {\n \n }\n \n public void follow(int followerId, int followeeId) {\n \n }\n \n public void unfollow(int followerId, int followeeId) {\n \n }\n}\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * Twitter obj = new Twitter();\n * obj.postTweet(userId,tweetId);\n * List<Integer> param_2 = obj.getNewsFeed(userId);\n * obj.follow(followerId,followeeId);\n * obj.unfollow(followerId,followeeId);\n */",
"code":"class Twitter:\n\n def __init__(self):\n \n\n def postTweet(self, userId: int, tweetId: int) -> None:\n \n\n def getNewsFeed(self, userId: int) -> List[int]:\n \n\n def follow(self, followerId: int, followeeId: int) -> None:\n \n\n def unfollow(self, followerId: int, followeeId: int) -> None:\n \n\n\n# Your Twitter object will be instantiated and called as such:\n# obj = Twitter()\n# obj.postTweet(userId,tweetId)\n# param_2 = obj.getNewsFeed(userId)\n# obj.follow(followerId,followeeId)\n# obj.unfollow(followerId,followeeId)",
"__typename":"CodeSnippetNode"
},
{
"lang":"C",
"langSlug":"c",
"code":"\n\n\ntypedef struct {\n \n} Twitter;\n\n\nTwitter* twitterCreate() {\n \n}\n\nvoid twitterPostTweet(Twitter* obj, int userId, int tweetId) {\n \n}\n\nint* twitterGetNewsFeed(Twitter* obj, int userId, int* retSize) {\n \n}\n\nvoid twitterFollow(Twitter* obj, int followerId, int followeeId) {\n \n}\n\nvoid twitterUnfollow(Twitter* obj, int followerId, int followeeId) {\n \n}\n\nvoid twitterFree(Twitter* obj) {\n \n}\n\n/**\n * Your Twitter struct will be instantiated and called as such:\n * Twitter* obj = twitterCreate();\n * twitterPostTweet(obj, userId, tweetId);\n \n * int* param_2 = twitterGetNewsFeed(obj, userId, retSize);\n \n * twitterFollow(obj, followerId, followeeId);\n \n * twitterUnfollow(obj, followerId, followeeId);\n \n * twitterFree(obj);\n*/",
"__typename":"CodeSnippetNode"
},
{
"lang":"C#",
"langSlug":"csharp",
"code":"public class Twitter {\n\n public Twitter() {\n \n }\n \n public void PostTweet(int userId, int tweetId) {\n \n }\n \n public IList<int> GetNewsFeed(int userId) {\n \n }\n \n public void Follow(int followerId, int followeeId) {\n \n }\n \n public void Unfollow(int followerId, int followeeId) {\n \n }\n}\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * Twitter obj = new Twitter();\n * obj.PostTweet(userId,tweetId);\n * IList<int> param_2 = obj.GetNewsFeed(userId);\n * obj.Follow(followerId,followeeId);\n * obj.Unfollow(followerId,followeeId);\n */",
"code":"-spec twitter_init_() -> any().\ntwitter_init_() ->\n .\n\n-spec twitter_post_tweet(UserId :: integer(), TweetId :: integer()) -> any().\ntwitter_post_tweet(UserId, TweetId) ->\n .\n\n-spec twitter_get_news_feed(UserId :: integer()) -> [integer()].\ntwitter_get_news_feed(UserId) ->\n .\n\n-spec twitter_follow(FollowerId :: integer(), FolloweeId :: integer()) -> any().\ntwitter_follow(FollowerId, FolloweeId) ->\n .\n\n-spec twitter_unfollow(FollowerId :: integer(), FolloweeId :: integer()) -> any().\ntwitter_unfollow(FollowerId, FolloweeId) ->\n .\n\n\n%% Your functions will be called as such:\n%% twitter_init_(),\n%% twitter_post_tweet(UserId, TweetId),\n%% Param_2 = twitter_get_news_feed(UserId),\n%% twitter_follow(FollowerId, FolloweeId),\n%% twitter_unfollow(FollowerId, FolloweeId),\n\n%% twitter_init_ will be called before every test case, in which you can do some necessary initializations.",
"__typename":"CodeSnippetNode"
},
{
"lang":"Elixir",
"langSlug":"elixir",
"code":"defmodule Twitter do\n @spec init_() :: any\n def init_() do\n\n end\n\n @spec post_tweet(user_id :: integer, tweet_id :: integer) :: any\n def post_tweet(user_id, tweet_id) do\n\n end\n\n @spec get_news_feed(user_id :: integer) :: [integer]\n def get_news_feed(user_id) do\n\n end\n\n @spec follow(follower_id :: integer, followee_id :: integer) :: any\n def follow(follower_id, followee_id) do\n\n end\n\n @spec unfollow(follower_id :: integer, followee_id :: integer) :: any\n def unfollow(follower_id, followee_id) do\n\n end\nend\n\n# Your functions will be called as such:\n# Twitter.init_()\n# Twitter.post_tweet(user_id, tweet_id)\n# param_2 = Twitter.get_news_feed(user_id)\n# Twitter.follow(follower_id, followee_id)\n# Twitter.unfollow(follower_id, followee_id)\n\n# Twitter.init_ will be called before every test case, in which you can do some necessary initializations.",
"envInfo":"{\"cpp\": [\"C++\", \"<p>Compiled with <code> clang 11 </code> using the latest C++ 17 standard.</p>\\r\\n\\r\\n<p>Your code is compiled with level two optimization (<code>-O2</code>). <a href=\\\"https://github.com/google/sanitizers/wiki/AddressSanitizer\\\" target=\\\"_blank\\\">AddressSanitizer</a> is also enabled to help detect out-of-bounds and use-after-free bugs.</p>\\r\\n\\r\\n<p>Most standard library headers are already included automatically for your convenience.</p>\"], \"java\": [\"Java\", \"<p><code> OpenJDK 17 </code>. Java 8 features such as lambda expressions and stream API can be used. </p>\\r\\n\\r\\n<p>Most standard library headers are already included automatically for your convenience.</p>\\r\\n<p>Includes <code>Pair</code> class from https://docs.oracle.com/javase/8/javafx/api/javafx/util/Pair.html.</p>\"], \"python\": [\"Python\", \"<p><code>Python 2.7.12</code>.</p>\\r\\n\\r\\n<p>Most libraries are already imported automatically for your convenience, such as <a href=\\\"https://docs.python.org/2/library/array.html\\\" target=\\\"_blank\\\">array</a>, <a href=\\\"https://docs.python.org/2/library/bisect.html\\\" target=\\\"_blank\\\">bisect</a>, <a href=\\\"https://docs.python.org/2/library/collections.html\\\" target=\\\"_blank\\\">collections</a>. If you need more libraries, you can import it yourself.</p>\\r\\n\\r\\n<p>For Map/TreeMap data structure, you may use <a href=\\\"http://www.grantjenks.com/docs/sortedcontainers/\\\" target=\\\"_blank\\\">sortedcontainers</a> library.</p>\\r\\n\\r\\n<p>Note that Python 2.7 <a href=\\\"https://www.python.org/dev/peps/pep-0373/\\\" target=\\\"_blank\\\">will not be maintained past 2020</a>. For the latest Python, please choose Python3 instead.</p>\"], \"c\": [\"C\", \"<p>Compiled with <code>gcc 8.2</code> using the gnu99 standard.</p>\\r\\n\\r\\n<p>Your code is compiled with level one optimization (<code>-O1</code>). <a href=\\\"https://github.com/google/sanitizers/wiki/AddressSanitizer\\\" target=\\\"_blank\\\">AddressSanitizer</a> is also enabled to help detect out-of-bounds and use-after-free bugs.</p>\\r\\n\\r\\n<p>Most standard library headers are already included automatically for your convenience.</p>\\r\\n\\r\\n<p>For hash table operations, you may use <a href=\\\"https://troydhanson.github.io/uthash/\\\" target=\\\"_blank\\\">uthash</a>. \\\"uthash.h\\\" is included by default. Below are some examples:</p>\\r\\n\\r\\n<p><b>1. Adding an item to a hash.</b>\\r\\n<pre>\\r\\nstruct hash_entry {\\r\\n int id; /* we'll use this field as the key */\\r\\n char name[10];\\r\\n UT_hash_handle hh; /* makes this structure hashable */\\r\\n};\\r\\n\\r\\nstruct hash_entry *users = NULL;\\r\\n\\r\\nvoid add_user(struct hash_entry *s) {\\r\\n HASH_ADD_INT(users, id, s);\\r\\n}\\r\\n</pre>\\r\\n</p>\\r\\n\\r\\n<p><b>2. Looking up an item in a hash:</b>\\r\\n<pre>\\r\\nstruct hash_entry *find_user(int user_id) {\\r\\n struct hash_entry *s;\\r\\n HASH_FIND_INT(users, &user_id, s);\\r\\n return s;\\r\\n}\\r\\n</pre>\\r\\n</p>\\r\\n\\r\\n<p><b>3. Deleting an item in a hash:</b>\\r\\n<pre>\\r\\nvoid delete_user(struct hash_entry *user) {\\r\\n HASH_DEL(users, user); \\r\\n}\\r\\n</pre>\\r\\n</p>\"], \"csharp\": [\"C#\", \"<p><a href=\\\"https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9\\\" target=\\\"_blank\\\">C# 10 with .NET 6 runtime</a></p>\\r\\n\\r\\n<p>Your code is compiled with debug flag enabled (<code>/debug</code>).</p>\"], \"javascript\": [\"JavaScript\", \"<p><code>Node.js 16.13.2</code>.</p>\\r\\n\\r\\n<p>Your code is run with <code>--harmony</code> flag, enabling <a href=\\\"http://node.green/\\\" target=\\\"_blank\\\">new ES6 features</a>.</p>\\r\\n\\r\\n<p><a href=\\\"https://lodash.com\\\" target=\\\"_blank\\\">lodash.js</a> library is included by default.</p>\\r\\n\\r\\n<p>For Priority Queue / Queue data structures, you may use <a href=\\\"https://github.com/datastructures-js/priority-queue\\\" target=\\\"_blank\\\">datastructures-js/priority-queue</a> and <a href=\\\"https: