mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-11 02:58:13 +08:00
180 lines
35 KiB
JSON
180 lines
35 KiB
JSON
{
|
||
"data": {
|
||
"question": {
|
||
"questionId": "355",
|
||
"questionFrontendId": "355",
|
||
"categoryTitle": "Algorithms",
|
||
"boundTopicId": 1513,
|
||
"title": "Design Twitter",
|
||
"titleSlug": "design-twitter",
|
||
"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",
|
||
"translatedTitle": "设计推特",
|
||
"translatedContent": "<p>设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近 <code>10</code> 条推文。</p>\n\n<p>实现 <code>Twitter</code> 类:</p>\n\n<ul>\n\t<li><code>Twitter()</code> 初始化简易版推特对象</li>\n\t<li><code>void postTweet(int userId, int tweetId)</code> 根据给定的 <code>tweetId</code> 和 <code>userId</code> 创建一条新推文。每次调用此函数都会使用一个不同的 <code>tweetId</code> 。</li>\n\t<li><code>List<Integer> getNewsFeed(int userId)</code> 检索当前用户新闻推送中最近 <code>10</code> 条推文的 ID 。新闻推送中的每一项都必须是由用户关注的人或者是用户自己发布的推文。推文必须 <strong>按照时间顺序由最近到最远排序</strong> 。</li>\n\t<li><code>void follow(int followerId, int followeeId)</code> ID 为 <code>followerId</code> 的用户开始关注 ID 为 <code>followeeId</code> 的用户。</li>\n\t<li><code>void unfollow(int followerId, int followeeId)</code> ID 为 <code>followerId</code> 的用户不再关注 ID 为 <code>followeeId</code> 的用户。</li>\n</ul>\n\n<p> </p>\n\n<p><strong>示例:</strong></p>\n\n<pre>\n<strong>输入</strong>\n[\"Twitter\", \"postTweet\", \"getNewsFeed\", \"follow\", \"postTweet\", \"getNewsFeed\", \"unfollow\", \"getNewsFeed\"]\n[[], [1, 5], [1], [1, 2], [2, 6], [1], [1, 2], [1]]\n<strong>输出</strong>\n[null, null, [5], null, null, [6, 5], null, [5]]\n\n<strong>解释</strong>\nTwitter twitter = new Twitter();\ntwitter.postTweet(1, 5); // 用户 1 发送了一条新推文 (用户 id = 1, 推文 id = 5)\ntwitter.getNewsFeed(1); // 用户 1 的获取推文应当返回一个列表,其中包含一个 id 为 5 的推文\ntwitter.follow(1, 2); // 用户 1 关注了用户 2\ntwitter.postTweet(2, 6); // 用户 2 发送了一个新推文 (推文 id = 6)\ntwitter.getNewsFeed(1); // 用户 1 的获取推文应当返回一个列表,其中包含两个推文,id 分别为 -> [6, 5] 。推文 id 6 应当在推文 id 5 之前,因为它是在 5 之后发送的\ntwitter.unfollow(1, 2); // 用户 1 取消关注了用户 2\ntwitter.getNewsFeed(1); // 用户 1 获取推文应当返回一个列表,其中包含一个 id 为 5 的推文。因为用户 1 已经不再关注用户 2</pre>\n\n<p> </p>\n\n<p><strong>提示:</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>所有推特的 ID 都互不相同</li>\n\t<li><code>postTweet</code>、<code>getNewsFeed</code>、<code>follow</code> 和 <code>unfollow</code> 方法最多调用 <code>3 * 10<sup>4</sup></code> 次</li>\n</ul>\n",
|
||
"isPaidOnly": false,
|
||
"difficulty": "Medium",
|
||
"likes": 292,
|
||
"dislikes": 0,
|
||
"isLiked": null,
|
||
"similarQuestions": "[]",
|
||
"contributors": [],
|
||
"langToValidPlayground": "{\"cpp\": false, \"java\": false, \"python\": false, \"python3\": false, \"mysql\": false, \"mssql\": false, \"oraclesql\": false, \"c\": false, \"csharp\": false, \"javascript\": false, \"ruby\": false, \"bash\": false, \"swift\": false, \"golang\": false, \"scala\": false, \"html\": false, \"pythonml\": false, \"kotlin\": false, \"rust\": false, \"php\": false, \"typescript\": false, \"racket\": false, \"erlang\": false, \"elixir\": false}",
|
||
"topicTags": [
|
||
{
|
||
"name": "Design",
|
||
"slug": "design",
|
||
"translatedName": "设计",
|
||
"__typename": "TopicTagNode"
|
||
},
|
||
{
|
||
"name": "Hash Table",
|
||
"slug": "hash-table",
|
||
"translatedName": "哈希表",
|
||
"__typename": "TopicTagNode"
|
||
},
|
||
{
|
||
"name": "Linked List",
|
||
"slug": "linked-list",
|
||
"translatedName": "链表",
|
||
"__typename": "TopicTagNode"
|
||
},
|
||
{
|
||
"name": "Heap (Priority Queue)",
|
||
"slug": "heap-priority-queue",
|
||
"translatedName": "堆(优先队列)",
|
||
"__typename": "TopicTagNode"
|
||
}
|
||
],
|
||
"companyTagStats": null,
|
||
"codeSnippets": [
|
||
{
|
||
"lang": "C++",
|
||
"langSlug": "cpp",
|
||
"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 */",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "Python",
|
||
"langSlug": "python",
|
||
"code": "class Twitter(object):\n\n def __init__(self):\n\n\n def postTweet(self, userId, tweetId):\n \"\"\"\n :type userId: int\n :type tweetId: int\n :rtype: None\n \"\"\"\n\n\n def getNewsFeed(self, userId):\n \"\"\"\n :type userId: int\n :rtype: List[int]\n \"\"\"\n\n\n def follow(self, followerId, followeeId):\n \"\"\"\n :type followerId: int\n :type followeeId: int\n :rtype: None\n \"\"\"\n\n\n def unfollow(self, followerId, followeeId):\n \"\"\"\n :type followerId: int\n :type followeeId: int\n :rtype: None\n \"\"\"\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": "Python3",
|
||
"langSlug": "python3",
|
||
"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 */",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "JavaScript",
|
||
"langSlug": "javascript",
|
||
"code": "\nvar Twitter = function() {\n\n};\n\n/** \n * @param {number} userId \n * @param {number} tweetId\n * @return {void}\n */\nTwitter.prototype.postTweet = function(userId, tweetId) {\n\n};\n\n/** \n * @param {number} userId\n * @return {number[]}\n */\nTwitter.prototype.getNewsFeed = function(userId) {\n\n};\n\n/** \n * @param {number} followerId \n * @param {number} followeeId\n * @return {void}\n */\nTwitter.prototype.follow = function(followerId, followeeId) {\n\n};\n\n/** \n * @param {number} followerId \n * @param {number} followeeId\n * @return {void}\n */\nTwitter.prototype.unfollow = function(followerId, followeeId) {\n\n};\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * var obj = new Twitter()\n * obj.postTweet(userId,tweetId)\n * var param_2 = obj.getNewsFeed(userId)\n * obj.follow(followerId,followeeId)\n * obj.unfollow(followerId,followeeId)\n */",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "Ruby",
|
||
"langSlug": "ruby",
|
||
"code": "class Twitter\n def initialize()\n\n end\n\n\n=begin\n :type user_id: Integer\n :type tweet_id: Integer\n :rtype: Void\n=end\n def post_tweet(user_id, tweet_id)\n\n end\n\n\n=begin\n :type user_id: Integer\n :rtype: Integer[]\n=end\n def get_news_feed(user_id)\n\n end\n\n\n=begin\n :type follower_id: Integer\n :type followee_id: Integer\n :rtype: Void\n=end\n def follow(follower_id, followee_id)\n\n end\n\n\n=begin\n :type follower_id: Integer\n :type followee_id: Integer\n :rtype: Void\n=end\n def unfollow(follower_id, followee_id)\n\n end\n\n\nend\n\n# Your Twitter object will be instantiated and called as such:\n# obj = Twitter.new()\n# obj.post_tweet(user_id, tweet_id)\n# param_2 = obj.get_news_feed(user_id)\n# obj.follow(follower_id, followee_id)\n# obj.unfollow(follower_id, followee_id)",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "Swift",
|
||
"langSlug": "swift",
|
||
"code": "\nclass Twitter {\n\n init() {\n\n }\n \n func postTweet(_ userId: Int, _ tweetId: Int) {\n\n }\n \n func getNewsFeed(_ userId: Int) -> [Int] {\n\n }\n \n func follow(_ followerId: Int, _ followeeId: Int) {\n\n }\n \n func unfollow(_ followerId: Int, _ followeeId: Int) {\n\n }\n}\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * let obj = Twitter()\n * obj.postTweet(userId, tweetId)\n * let ret_2: [Int] = obj.getNewsFeed(userId)\n * obj.follow(followerId, followeeId)\n * obj.unfollow(followerId, followeeId)\n */",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "Go",
|
||
"langSlug": "golang",
|
||
"code": "type Twitter struct {\n\n}\n\n\nfunc Constructor() Twitter {\n\n}\n\n\nfunc (this *Twitter) PostTweet(userId int, tweetId int) {\n\n}\n\n\nfunc (this *Twitter) GetNewsFeed(userId int) []int {\n\n}\n\n\nfunc (this *Twitter) Follow(followerId int, followeeId int) {\n\n}\n\n\nfunc (this *Twitter) Unfollow(followerId int, followeeId int) {\n\n}\n\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * obj := Constructor();\n * obj.PostTweet(userId,tweetId);\n * param_2 := obj.GetNewsFeed(userId);\n * obj.Follow(followerId,followeeId);\n * obj.Unfollow(followerId,followeeId);\n */",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "Scala",
|
||
"langSlug": "scala",
|
||
"code": "class Twitter() {\n\n def postTweet(userId: Int, tweetId: Int) {\n\n }\n\n def getNewsFeed(userId: Int): List[Int] = {\n\n }\n\n def follow(followerId: Int, followeeId: Int) {\n\n }\n\n def unfollow(followerId: Int, followeeId: Int) {\n\n }\n\n}\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * var obj = new Twitter()\n * obj.postTweet(userId,tweetId)\n * var param_2 = obj.getNewsFeed(userId)\n * obj.follow(followerId,followeeId)\n * obj.unfollow(followerId,followeeId)\n */",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "Kotlin",
|
||
"langSlug": "kotlin",
|
||
"code": "class Twitter() {\n\n fun postTweet(userId: Int, tweetId: Int) {\n\n }\n\n fun getNewsFeed(userId: Int): List<Int> {\n\n }\n\n fun follow(followerId: Int, followeeId: Int) {\n\n }\n\n fun unfollow(followerId: Int, followeeId: Int) {\n\n }\n\n}\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * var obj = Twitter()\n * obj.postTweet(userId,tweetId)\n * var param_2 = obj.getNewsFeed(userId)\n * obj.follow(followerId,followeeId)\n * obj.unfollow(followerId,followeeId)\n */",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "Rust",
|
||
"langSlug": "rust",
|
||
"code": "struct Twitter {\n\n}\n\n\n/**\n * `&self` means the method takes an immutable reference.\n * If you need a mutable reference, change it to `&mut self` instead.\n */\nimpl Twitter {\n\n fn new() -> Self {\n\n }\n \n fn post_tweet(&self, user_id: i32, tweet_id: i32) {\n\n }\n \n fn get_news_feed(&self, user_id: i32) -> Vec<i32> {\n\n }\n \n fn follow(&self, follower_id: i32, followee_id: i32) {\n\n }\n \n fn unfollow(&self, follower_id: i32, followee_id: i32) {\n\n }\n}\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * let obj = Twitter::new();\n * obj.post_tweet(userId, tweetId);\n * let ret_2: Vec<i32> = obj.get_news_feed(userId);\n * obj.follow(followerId, followeeId);\n * obj.unfollow(followerId, followeeId);\n */",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "PHP",
|
||
"langSlug": "php",
|
||
"code": "class Twitter {\n /**\n */\n function __construct() {\n\n }\n\n /**\n * @param Integer $userId\n * @param Integer $tweetId\n * @return NULL\n */\n function postTweet($userId, $tweetId) {\n\n }\n\n /**\n * @param Integer $userId\n * @return Integer[]\n */\n function getNewsFeed($userId) {\n\n }\n\n /**\n * @param Integer $followerId\n * @param Integer $followeeId\n * @return NULL\n */\n function follow($followerId, $followeeId) {\n\n }\n\n /**\n * @param Integer $followerId\n * @param Integer $followeeId\n * @return NULL\n */\n function unfollow($followerId, $followeeId) {\n\n }\n}\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * $obj = Twitter();\n * $obj->postTweet($userId, $tweetId);\n * $ret_2 = $obj->getNewsFeed($userId);\n * $obj->follow($followerId, $followeeId);\n * $obj->unfollow($followerId, $followeeId);\n */",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "TypeScript",
|
||
"langSlug": "typescript",
|
||
"code": "class Twitter {\n constructor() {\n\n }\n\n postTweet(userId: number, tweetId: number): void {\n\n }\n\n getNewsFeed(userId: number): number[] {\n\n }\n\n follow(followerId: number, followeeId: number): void {\n\n }\n\n unfollow(followerId: number, followeeId: number): void {\n\n }\n}\n\n/**\n * Your Twitter object will be instantiated and called as such:\n * var obj = new Twitter()\n * obj.postTweet(userId,tweetId)\n * var param_2 = obj.getNewsFeed(userId)\n * obj.follow(followerId,followeeId)\n * obj.unfollow(followerId,followeeId)\n */",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "Racket",
|
||
"langSlug": "racket",
|
||
"code": "(define twitter%\n (class object%\n (super-new)\n (init-field)\n \n ; post-tweet : exact-integer? exact-integer? -> void?\n (define/public (post-tweet user-id tweet-id)\n\n )\n ; get-news-feed : exact-integer? -> (listof exact-integer?)\n (define/public (get-news-feed user-id)\n\n )\n ; follow : exact-integer? exact-integer? -> void?\n (define/public (follow follower-id followee-id)\n\n )\n ; unfollow : exact-integer? exact-integer? -> void?\n (define/public (unfollow follower-id followee-id)\n\n )))\n\n;; Your twitter% object will be instantiated and called as such:\n;; (define obj (new twitter%))\n;; (send obj post-tweet user-id tweet-id)\n;; (define param_2 (send obj get-news-feed user-id))\n;; (send obj follow follower-id followee-id)\n;; (send obj unfollow follower-id followee-id)",
|
||
"__typename": "CodeSnippetNode"
|
||
},
|
||
{
|
||
"lang": "Erlang",
|
||
"langSlug": "erlang",
|
||
"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.",
|
||
"__typename": "CodeSnippetNode"
|
||
}
|
||
],
|
||
"stats": "{\"totalAccepted\": \"33K\", \"totalSubmission\": \"80.7K\", \"totalAcceptedRaw\": 33028, \"totalSubmissionRaw\": 80678, \"acRate\": \"40.9%\"}",
|
||
"hints": [],
|
||
"solution": null,
|
||
"status": null,
|
||
"sampleTestCase": "[\"Twitter\",\"postTweet\",\"getNewsFeed\",\"follow\",\"postTweet\",\"getNewsFeed\",\"unfollow\",\"getNewsFeed\"]\n[[],[1,5],[1],[1,2],[2,6],[1],[1,2],[1]]",
|
||
"metaData": "{\n \"classname\": \"Twitter\",\n \"constructor\": {\n \"params\": []\n },\n \"methods\": [\n {\n \"params\": [\n {\n \"type\": \"integer\",\n \"name\": \"userId\"\n },\n {\n \"type\": \"integer\",\n \"name\": \"tweetId\"\n }\n ],\n \"return\": {\n \"type\": \"void\"\n },\n \"name\": \"postTweet\"\n },\n {\n \"params\": [\n {\n \"type\": \"integer\",\n \"name\": \"userId\"\n }\n ],\n \"return\": {\n \"type\": \"list<integer>\"\n },\n \"name\": \"getNewsFeed\"\n },\n {\n \"params\": [\n {\n \"type\": \"integer\",\n \"name\": \"followerId\"\n },\n {\n \"type\": \"integer\",\n \"name\": \"followeeId\"\n }\n ],\n \"return\": {\n \"type\": \"void\"\n },\n \"name\": \"follow\"\n },\n {\n \"params\": [\n {\n \"type\": \"integer\",\n \"name\": \"followerId\"\n },\n {\n \"type\": \"integer\",\n \"name\": \"followeeId\"\n }\n ],\n \"return\": {\n \"type\": \"void\"\n },\n \"name\": \"unfollow\"\n }\n ],\n \"return\": {\n \"type\": \"boolean\"\n },\n \"systemdesign\": true\n}",
|
||
"judgerAvailable": true,
|
||
"judgeType": "large",
|
||
"mysqlSchemas": [],
|
||
"enableRunCode": true,
|
||
"envInfo": "{\"cpp\":[\"C++\",\"<p>\\u7248\\u672c\\uff1a<code>clang 11<\\/code> \\u91c7\\u7528\\u6700\\u65b0C++ 17\\u6807\\u51c6\\u3002<\\/p>\\r\\n\\r\\n<p>\\u7f16\\u8bd1\\u65f6\\uff0c\\u5c06\\u4f1a\\u91c7\\u7528<code>-O2<\\/code>\\u7ea7\\u4f18\\u5316\\u3002<a href=\\\"https:\\/\\/github.com\\/google\\/sanitizers\\/wiki\\/AddressSanitizer\\\" target=\\\"_blank\\\">AddressSanitizer<\\/a> \\u4e5f\\u88ab\\u5f00\\u542f\\u6765\\u68c0\\u6d4b<code>out-of-bounds<\\/code>\\u548c<code>use-after-free<\\/code>\\u9519\\u8bef\\u3002<\\/p>\\r\\n\\r\\n<p>\\u4e3a\\u4e86\\u4f7f\\u7528\\u65b9\\u4fbf\\uff0c\\u5927\\u90e8\\u5206\\u6807\\u51c6\\u5e93\\u7684\\u5934\\u6587\\u4ef6\\u5df2\\u7ecf\\u88ab\\u81ea\\u52a8\\u5bfc\\u5165\\u3002<\\/p>\"],\"java\":[\"Java\",\"<p>\\u7248\\u672c\\uff1a<code>OpenJDK 17<\\/code>\\u3002\\u53ef\\u4ee5\\u4f7f\\u7528Java 8\\u7684\\u7279\\u6027\\u4f8b\\u5982\\uff0clambda expressions \\u548c stream API\\u3002<\\/p>\\r\\n\\r\\n<p>\\u4e3a\\u4e86\\u65b9\\u4fbf\\u8d77\\u89c1\\uff0c\\u5927\\u90e8\\u5206\\u6807\\u51c6\\u5e93\\u7684\\u5934\\u6587\\u4ef6\\u5df2\\u88ab\\u5bfc\\u5165\\u3002<\\/p>\\r\\n\\r\\n<p>\\u5305\\u542b Pair \\u7c7b: https:\\/\\/docs.oracle.com\\/javase\\/8\\/javafx\\/api\\/javafx\\/util\\/Pair.html <\\/p>\"],\"python\":[\"Python\",\"<p>\\u7248\\u672c\\uff1a <code>Python 2.7.12<\\/code><\\/p>\\r\\n\\r\\n<p>\\u4e3a\\u4e86\\u65b9\\u4fbf\\u8d77\\u89c1\\uff0c\\u5927\\u90e8\\u5206\\u5e38\\u7528\\u5e93\\u5df2\\u7ecf\\u88ab\\u81ea\\u52a8 \\u5bfc\\u5165\\uff0c\\u5982\\uff1a<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>\\u3002\\u5982\\u679c\\u60a8\\u9700\\u8981\\u4f7f\\u7528\\u5176\\u4ed6\\u5e93\\u51fd\\u6570\\uff0c\\u8bf7\\u81ea\\u884c\\u5bfc\\u5165\\u3002<\\/p>\\r\\n\\r\\n<p>\\u6ce8\\u610f Python 2.7 <a href=\\\"https:\\/\\/www.python.org\\/dev\\/peps\\/pep-0373\\/\\\" target=\\\"_blank\\\">\\u5c06\\u57282020\\u5e74\\u540e\\u4e0d\\u518d\\u7ef4\\u62a4<\\/a>\\u3002 \\u5982\\u60f3\\u4f7f\\u7528\\u6700\\u65b0\\u7248\\u7684Python\\uff0c\\u8bf7\\u9009\\u62e9Python 3\\u3002<\\/p>\"],\"c\":[\"C\",\"<p>\\u7248\\u672c\\uff1a<code>GCC 8.2<\\/code>\\uff0c\\u91c7\\u7528GNU99\\u6807\\u51c6\\u3002<\\/p>\\r\\n\\r\\n<p>\\u7f16\\u8bd1\\u65f6\\uff0c\\u5c06\\u4f1a\\u91c7\\u7528<code>-O1<\\/code>\\u7ea7\\u4f18\\u5316\\u3002 <a href=\\\"https:\\/\\/github.com\\/google\\/sanitizers\\/wiki\\/AddressSanitizer\\\" target=\\\"_blank\\\">AddressSanitizer<\\/a>\\u4e5f\\u88ab\\u5f00\\u542f\\u6765\\u68c0\\u6d4b<code>out-of-bounds<\\/code>\\u548c<code>use-after-free<\\/code>\\u9519\\u8bef\\u3002<\\/p>\\r\\n\\r\\n<p>\\u4e3a\\u4e86\\u4f7f\\u7528\\u65b9\\u4fbf\\uff0c\\u5927\\u90e8\\u5206\\u6807\\u51c6\\u5e93\\u7684\\u5934\\u6587\\u4ef6\\u5df2\\u7ecf\\u88ab\\u81ea\\u52a8\\u5bfc\\u5165\\u3002<\\/p>\\r\\n\\r\\n<p>\\u5982\\u60f3\\u4f7f\\u7528\\u54c8\\u5e0c\\u8868\\u8fd0\\u7b97, \\u60a8\\u53ef\\u4ee5\\u4f7f\\u7528 <a href=\\\"https:\\/\\/troydhanson.github.io\\/uthash\\/\\\" target=\\\"_blank\\\">uthash<\\/a>\\u3002 \\\"uthash.h\\\"\\u5df2\\u7ecf\\u9ed8\\u8ba4\\u88ab\\u5bfc\\u5165\\u3002\\u8bf7\\u770b\\u5982\\u4e0b\\u793a\\u4f8b:<\\/p>\\r\\n\\r\\n<p><b>1. \\u5f80\\u54c8\\u5e0c\\u8868\\u4e2d\\u6dfb\\u52a0\\u4e00\\u4e2a\\u5bf9\\u8c61\\uff1a<\\/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. \\u5728\\u54c8\\u5e0c\\u8868\\u4e2d\\u67e5\\u627e\\u4e00\\u4e2a\\u5bf9\\u8c61\\uff1a<\\/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. \\u4ece\\u54c8\\u5e0c\\u8868\\u4e2d\\u5220\\u9664\\u4e00\\u4e2a\\u5bf9\\u8c61\\uff1a<\\/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<\\/a> \\u8fd0\\u884c\\u5728 .NET 6 \\u4e0a<\\/p>\\r\\n\\r\\n<p>\\u60a8\\u7684\\u4ee3\\u7801\\u5728\\u7f16\\u8bd1\\u65f6\\u9ed8\\u8ba4\\u5f00\\u542f\\u4e86debug\\u6807\\u8bb0(<code>\\/debug:pdbonly<\\/code>)\\u3002<\\/p>\"],\"javascript\":[\"JavaScript\",\"<p>\\u7248\\u672c\\uff1a<code>Node.js 16.13.2<\\/code><\\/p>\\r\\n\\r\\n<p>\\u60a8\\u7684\\u4ee3\\u7801\\u5728\\u6267\\u884c\\u65f6\\u5c06\\u5e26\\u4e0a <code>--harmony<\\/code> \\u6807\\u8bb0\\u6765\\u5f00\\u542f <a href=\\\"http:\\/\\/node.green\\/\\\" target=\\\"_blank\\\">\\u65b0\\u7248ES6\\u7279\\u6027<\\/a>\\u3002<\\/p>\\r\\n\\r\\n<p><a href=\\\"https:\\/\\/lodash.com\\\" target=\\\"_blank\\\">lodash.js<\\/a> \\u5e93\\u5df2\\u7ecf\\u9ed8\\u8ba4\\u88ab\\u5305\\u542b\\u3002<\\/p>\\r\\n\\r\\n<p> \\u5982\\u9700\\u4f7f\\u7528\\u961f\\u5217\\/\\u4f18\\u5148\\u961f\\u5217\\uff0c\\u60a8\\u53ef\\u4f7f\\u7528 <a href=\\\"https:\\/\\/github.com\\/datastructures-js\\/priority-queue\\\" target=\\\"_blank\\\"> datastructures-js\\/priority-queue<\\/a> \\u548c <a href=\\\"https:\\/\\/github.com\\/datastructures-js\\/queue\\\" target=\\\"_blank\\\"> datastructures-js\\/queue<\\/a>\\u3002<\\/p>\"],\"ruby\":[\"Ruby\",\"<p>\\u4f7f\\u7528<code>Ruby 3.1<\\/code>\\u6267\\u884c<\\/p>\\r\\n\\r\\n<p>\\u4e00\\u4e9b\\u5e38\\u7528\\u7684\\u6570\\u636e\\u7ed3\\u6784\\u5df2\\u5728 Algorithms \\u6a21\\u5757\\u4e2d\\u63d0\\u4f9b\\uff1ahttps:\\/\\/www.rubydoc.info\\/github\\/kanwei\\/algorithms\\/Algorithms<\\/p>\"],\"swift\":[\"Swift\",\"<p>\\u7248\\u672c\\uff1a<code>Swift 5.5.2<\\/code><\\/p>\\r\\n\\r\\n<p>\\u6211\\u4eec\\u901a\\u5e38\\u4fdd\\u8bc1\\u66f4\\u65b0\\u5230 <a href=\\\"https:\\/\\/swift.org\\/download\\/\\\" target=\\\"_blank\\\">Apple\\u653e\\u51fa\\u7684\\u6700\\u65b0\\u7248Swift<\\/a>\\u3002\\u5982\\u679c\\u60a8\\u53d1\\u73b0Swift\\u4e0d\\u662f\\u6700\\u65b0\\u7248\\u7684\\uff0c\\u8bf7\\u8054\\u7cfb\\u6211\\u4eec\\uff01\\u6211\\u4eec\\u5c06\\u5c3d\\u5feb\\u66f4\\u65b0\\u3002<\\/p>\"],\"golang\":[\"Go\",\"<p>\\u7248\\u672c\\uff1a<code>Go 1.17<\\/code><\\/p>\\r\\n\\r\\n<p>\\u652f\\u6301 <a href=\\\"https:\\/\\/godoc.org\\/github.com\\/emirpasic\\/gods\\\" target=\\\"_blank\\\">https:\\/\\/godoc.org\\/github.com\\/emirpasic\\/gods<\\/a> \\u7b2c\\u4e09\\u65b9\\u5e93\\u3002<\\/p>\"],\"python3\":[\"Python3\",\"<p>\\u7248\\u672c\\uff1a<code>Python 3.10<\\/code><\\/p>\\r\\n\\r\\n<p>\\u4e3a\\u4e86\\u65b9\\u4fbf\\u8d77\\u89c1\\uff0c\\u5927\\u90e8\\u5206\\u5e38\\u7528\\u5e93\\u5df2\\u7ecf\\u88ab\\u81ea\\u52a8 \\u5bfc\\u5165\\uff0c\\u5982<a href=\\\"https:\\/\\/docs.python.org\\/3\\/library\\/array.html\\\" target=\\\"_blank\\\">array<\\/a>, <a href=\\\"https:\\/\\/docs.python.org\\/3\\/library\\/bisect.html\\\" target=\\\"_blank\\\">bisect<\\/a>, <a href=\\\"https:\\/\\/docs.python.org\\/3\\/library\\/collections.html\\\" target=\\\"_blank\\\">collections<\\/a>\\u3002 \\u5982\\u679c\\u60a8\\u9700\\u8981\\u4f7f\\u7528\\u5176\\u4ed6\\u5e93\\u51fd\\u6570\\uff0c\\u8bf7\\u81ea\\u884c\\u5bfc\\u5165\\u3002<\\/p>\\r\\n\\r\\n<p>\\u5982\\u9700\\u4f7f\\u7528 Map\\/TreeMap \\u6570\\u636e\\u7ed3\\u6784\\uff0c\\u60a8\\u53ef\\u4f7f\\u7528 <a href=\\\"http:\\/\\/www.grantjenks.com\\/docs\\/sortedcontainers\\/\\\" target=\\\"_blank\\\">sortedcontainers<\\/a> \\u5e93\\u3002<\\/p>\"],\"scala\":[\"Scala\",\"<p>\\u7248\\u672c\\uff1a<code>Scala 2.13<\\/code><\\/p>\"],\"kotlin\":[\"Kotlin\",\"<p>\\u7248\\u672c\\uff1a<code>Kotlin 1.3.10<\\/code><\\/p>\"],\"rust\":[\"Rust\",\"<p>\\u7248\\u672c\\uff1a<code>rust 1.58.1<\\/code><\\/p>\\r\\n\\r\\n<p>\\u652f\\u6301 crates.io \\u7684 <a href=\\\"https:\\/\\/crates.io\\/crates\\/rand\\\" target=\\\"_blank\\\">rand<\\/a><\\/p>\"],\"php\":[\"PHP\",\"<p><code>PHP 8.1<\\/code>.<\\/p>\\r\\n\\r\\n<p>With bcmath module.<\\/p>\"],\"typescript\":[\"TypeScript\",\"<p>TypeScript 4.5.4<\\/p>\\r\\n\\r\\n<p>Compile Options: --alwaysStrict --strictBindCallApply --strictFunctionTypes --target ES2020<\\/p>\"],\"racket\":[\"Racket\",\"<p><a href=\\\"https:\\/\\/docs.racket-lang.org\\/guide\\/performance.html#%28tech._c%29\\\" target=\\\"_blank\\\">Racket CS<\\/a> v8.3<\\/p>\\r\\n\\r\\n<p>\\u4f7f\\u7528 #lang racket<\\/p>\\r\\n\\r\\n<p>\\u5df2\\u9884\\u5148 (require data\\/gvector data\\/queue data\\/order data\\/heap). \\u82e5\\u9700\\u4f7f\\u7528\\u5176\\u5b83\\u6570\\u636e\\u7ed3\\u6784\\uff0c\\u53ef\\u81ea\\u884c require\\u3002<\\/p>\"],\"erlang\":[\"Erlang\",\"Erlang\\/OTP 24.2\"],\"elixir\":[\"Elixir\",\"Elixir 1.13.0 with Erlang\\/OTP 24.2\"]}",
|
||
"book": null,
|
||
"isSubscribed": false,
|
||
"isDailyQuestion": false,
|
||
"dailyRecordStatus": null,
|
||
"editorType": "CKEDITOR",
|
||
"ugcQuestionId": null,
|
||
"style": "LEETCODE",
|
||
"exampleTestcases": "[\"Twitter\",\"postTweet\",\"getNewsFeed\",\"follow\",\"postTweet\",\"getNewsFeed\",\"unfollow\",\"getNewsFeed\"]\n[[],[1,5],[1],[1,2],[2,6],[1],[1,2],[1]]",
|
||
"__typename": "QuestionNode"
|
||
}
|
||
}
|
||
} |