1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-11 02:58:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/originData/implement-queue-using-stacks-lcci.json
2022-05-02 23:44:12 +08:00

188 lines
33 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"data": {
"question": {
"questionId": "100170",
"questionFrontendId": "面试题 03.04",
"categoryTitle": "LCCI",
"boundTopicId": 45971,
"title": "Implement Queue using Stacks LCCI",
"titleSlug": "implement-queue-using-stacks-lcci",
"content": "<p>Implement a MyQueue class which implements a queue using two stacks.</p>\r\n&nbsp;\r\n\r\n<p><strong>Example: </strong></p>\r\n\r\n<pre>\r\nMyQueue queue = new MyQueue();\r\n\r\nqueue.push(1);\r\nqueue.push(2);\r\nqueue.peek(); // return 1\r\nqueue.pop(); // return 1\r\nqueue.empty(); // return false</pre>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p><b>Notes:</b></p>\r\n\r\n<ul>\r\n\t<li>You must use&nbsp;<i>only</i>&nbsp;standard operations of a stack -- which means only&nbsp;<code>push to top</code>,&nbsp;<code>peek/pop from top</code>,&nbsp;<code>size</code>, and&nbsp;<code>is empty</code>&nbsp;operations are valid.</li>\r\n\t<li>Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.</li>\r\n\t<li>You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).</li>\r\n</ul>\r\n\r\n<p>&nbsp;</p>\r\n",
"translatedTitle": "化栈为队",
"translatedContent": "<p>实现一个MyQueue类该类用两个栈来实现一个队列。</p><br><p><strong>示例:</strong><pre>MyQueue queue = new MyQueue();<br><br>queue.push(1);<br>queue.push(2);<br>queue.peek(); // 返回 1<br>queue.pop(); // 返回 1<br>queue.empty(); // 返回 false</pre></p><br><p><strong>说明:</strong><br><ul><li>你只能使用标准的栈操作 -- 也就是只有 <code>push to top</code>, <code>peek/pop from top</code>, <code>size</code> 和 <code>is empty</code> 操作是合法的。</li><li>你所使用的语言也许不支持栈。你可以使用 list 或者 deque双端队列来模拟一个栈只要是标准的栈操作即可。</li><li>假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。</li></ul></p>",
"isPaidOnly": false,
"difficulty": "Easy",
"likes": 56,
"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": "Stack",
"slug": "stack",
"translatedName": "栈",
"__typename": "TopicTagNode"
},
{
"name": "Design",
"slug": "design",
"translatedName": "设计",
"__typename": "TopicTagNode"
},
{
"name": "Queue",
"slug": "queue",
"translatedName": "队列",
"__typename": "TopicTagNode"
}
],
"companyTagStats": null,
"codeSnippets": [
{
"lang": "C++",
"langSlug": "cpp",
"code": "class MyQueue {\npublic:\n /** Initialize your data structure here. */\n MyQueue() {\n\n }\n \n /** Push element x to the back of queue. */\n void push(int x) {\n\n }\n \n /** Removes the element from in front of queue and returns that element. */\n int pop() {\n\n }\n \n /** Get the front element. */\n int peek() {\n\n }\n \n /** Returns whether the queue is empty. */\n bool empty() {\n\n }\n};\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * MyQueue* obj = new MyQueue();\n * obj->push(x);\n * int param_2 = obj->pop();\n * int param_3 = obj->peek();\n * bool param_4 = obj->empty();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Java",
"langSlug": "java",
"code": "class MyQueue {\n\n /** Initialize your data structure here. */\n public MyQueue() {\n\n }\n \n /** Push element x to the back of queue. */\n public void push(int x) {\n\n }\n \n /** Removes the element from in front of queue and returns that element. */\n public int pop() {\n\n }\n \n /** Get the front element. */\n public int peek() {\n\n }\n \n /** Returns whether the queue is empty. */\n public boolean empty() {\n\n }\n}\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * MyQueue obj = new MyQueue();\n * obj.push(x);\n * int param_2 = obj.pop();\n * int param_3 = obj.peek();\n * boolean param_4 = obj.empty();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Python",
"langSlug": "python",
"code": "class MyQueue(object):\n\n def __init__(self):\n \"\"\"\n Initialize your data structure here.\n \"\"\"\n\n\n def push(self, x):\n \"\"\"\n Push element x to the back of queue.\n :type x: int\n :rtype: None\n \"\"\"\n\n\n def pop(self):\n \"\"\"\n Removes the element from in front of queue and returns that element.\n :rtype: int\n \"\"\"\n\n\n def peek(self):\n \"\"\"\n Get the front element.\n :rtype: int\n \"\"\"\n\n\n def empty(self):\n \"\"\"\n Returns whether the queue is empty.\n :rtype: bool\n \"\"\"\n\n\n\n# Your MyQueue object will be instantiated and called as such:\n# obj = MyQueue()\n# obj.push(x)\n# param_2 = obj.pop()\n# param_3 = obj.peek()\n# param_4 = obj.empty()",
"__typename": "CodeSnippetNode"
},
{
"lang": "Python3",
"langSlug": "python3",
"code": "class MyQueue:\n\n def __init__(self):\n \"\"\"\n Initialize your data structure here.\n \"\"\"\n\n\n def push(self, x: int) -> None:\n \"\"\"\n Push element x to the back of queue.\n \"\"\"\n\n\n def pop(self) -> int:\n \"\"\"\n Removes the element from in front of queue and returns that element.\n \"\"\"\n\n\n def peek(self) -> int:\n \"\"\"\n Get the front element.\n \"\"\"\n\n\n def empty(self) -> bool:\n \"\"\"\n Returns whether the queue is empty.\n \"\"\"\n\n\n\n# Your MyQueue object will be instantiated and called as such:\n# obj = MyQueue()\n# obj.push(x)\n# param_2 = obj.pop()\n# param_3 = obj.peek()\n# param_4 = obj.empty()",
"__typename": "CodeSnippetNode"
},
{
"lang": "C",
"langSlug": "c",
"code": "\n\n\ntypedef struct {\n\n} MyQueue;\n\n/** Initialize your data structure here. */\n\nMyQueue* myQueueCreate() {\n\n}\n\n/** Push element x to the back of queue. */\nvoid myQueuePush(MyQueue* obj, int x) {\n\n}\n\n/** Removes the element from in front of queue and returns that element. */\nint myQueuePop(MyQueue* obj) {\n\n}\n\n/** Get the front element. */\nint myQueuePeek(MyQueue* obj) {\n\n}\n\n/** Returns whether the queue is empty. */\nbool myQueueEmpty(MyQueue* obj) {\n\n}\n\nvoid myQueueFree(MyQueue* obj) {\n\n}\n\n/**\n * Your MyQueue struct will be instantiated and called as such:\n * MyQueue* obj = myQueueCreate();\n * myQueuePush(obj, x);\n \n * int param_2 = myQueuePop(obj);\n \n * int param_3 = myQueuePeek(obj);\n \n * bool param_4 = myQueueEmpty(obj);\n \n * myQueueFree(obj);\n*/",
"__typename": "CodeSnippetNode"
},
{
"lang": "C#",
"langSlug": "csharp",
"code": "public class MyQueue {\n\n /** Initialize your data structure here. */\n public MyQueue() {\n\n }\n \n /** Push element x to the back of queue. */\n public void Push(int x) {\n\n }\n \n /** Removes the element from in front of queue and returns that element. */\n public int Pop() {\n\n }\n \n /** Get the front element. */\n public int Peek() {\n\n }\n \n /** Returns whether the queue is empty. */\n public bool Empty() {\n\n }\n}\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * MyQueue obj = new MyQueue();\n * obj.Push(x);\n * int param_2 = obj.Pop();\n * int param_3 = obj.Peek();\n * bool param_4 = obj.Empty();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "JavaScript",
"langSlug": "javascript",
"code": "/**\n * Initialize your data structure here.\n */\nvar MyQueue = function() {\n\n};\n\n/**\n * Push element x to the back of queue. \n * @param {number} x\n * @return {void}\n */\nMyQueue.prototype.push = function(x) {\n\n};\n\n/**\n * Removes the element from in front of queue and returns that element.\n * @return {number}\n */\nMyQueue.prototype.pop = function() {\n\n};\n\n/**\n * Get the front element.\n * @return {number}\n */\nMyQueue.prototype.peek = function() {\n\n};\n\n/**\n * Returns whether the queue is empty.\n * @return {boolean}\n */\nMyQueue.prototype.empty = function() {\n\n};\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * var obj = new MyQueue()\n * obj.push(x)\n * var param_2 = obj.pop()\n * var param_3 = obj.peek()\n * var param_4 = obj.empty()\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Ruby",
"langSlug": "ruby",
"code": "class MyQueue\n\n=begin\n Initialize your data structure here.\n=end\n def initialize()\n\n end\n\n\n=begin\n Push element x to the back of queue.\n :type x: Integer\n :rtype: Void\n=end\n def push(x)\n\n end\n\n\n=begin\n Removes the element from in front of queue and returns that element.\n :rtype: Integer\n=end\n def pop()\n\n end\n\n\n=begin\n Get the front element.\n :rtype: Integer\n=end\n def peek()\n\n end\n\n\n=begin\n Returns whether the queue is empty.\n :rtype: Boolean\n=end\n def empty()\n\n end\n\n\nend\n\n# Your MyQueue object will be instantiated and called as such:\n# obj = MyQueue.new()\n# obj.push(x)\n# param_2 = obj.pop()\n# param_3 = obj.peek()\n# param_4 = obj.empty()",
"__typename": "CodeSnippetNode"
},
{
"lang": "Swift",
"langSlug": "swift",
"code": "\nclass MyQueue {\n\n /** Initialize your data structure here. */\n init() {\n\n }\n \n /** Push element x to the back of queue. */\n func push(_ x: Int) {\n\n }\n \n /** Removes the element from in front of queue and returns that element. */\n func pop() -> Int {\n\n }\n \n /** Get the front element. */\n func peek() -> Int {\n\n }\n \n /** Returns whether the queue is empty. */\n func empty() -> Bool {\n\n }\n}\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * let obj = MyQueue()\n * obj.push(x)\n * let ret_2: Int = obj.pop()\n * let ret_3: Int = obj.peek()\n * let ret_4: Bool = obj.empty()\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Go",
"langSlug": "golang",
"code": "type MyQueue struct {\n\n}\n\n\n/** Initialize your data structure here. */\nfunc Constructor() MyQueue {\n\n}\n\n\n/** Push element x to the back of queue. */\nfunc (this *MyQueue) Push(x int) {\n\n}\n\n\n/** Removes the element from in front of queue and returns that element. */\nfunc (this *MyQueue) Pop() int {\n\n}\n\n\n/** Get the front element. */\nfunc (this *MyQueue) Peek() int {\n\n}\n\n\n/** Returns whether the queue is empty. */\nfunc (this *MyQueue) Empty() bool {\n\n}\n\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * obj := Constructor();\n * obj.Push(x);\n * param_2 := obj.Pop();\n * param_3 := obj.Peek();\n * param_4 := obj.Empty();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Scala",
"langSlug": "scala",
"code": "class MyQueue() {\n\n /** Initialize your data structure here. */\n\n\n /** Push element x to the back of queue. */\n def push(x: Int) {\n\n }\n\n /** Removes the element from in front of queue and returns that element. */\n def pop(): Int = {\n\n }\n\n /** Get the front element. */\n def peek(): Int = {\n\n }\n\n /** Returns whether the queue is empty. */\n def empty(): Boolean = {\n\n }\n\n}\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * var obj = new MyQueue()\n * obj.push(x)\n * var param_2 = obj.pop()\n * var param_3 = obj.peek()\n * var param_4 = obj.empty()\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Kotlin",
"langSlug": "kotlin",
"code": "class MyQueue() {\n\n /** Initialize your data structure here. */\n\n\n /** Push element x to the back of queue. */\n fun push(x: Int) {\n\n }\n\n /** Removes the element from in front of queue and returns that element. */\n fun pop(): Int {\n\n }\n\n /** Get the front element. */\n fun peek(): Int {\n\n }\n\n /** Returns whether the queue is empty. */\n fun empty(): Boolean {\n\n }\n\n}\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * var obj = MyQueue()\n * obj.push(x)\n * var param_2 = obj.pop()\n * var param_3 = obj.peek()\n * var param_4 = obj.empty()\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Rust",
"langSlug": "rust",
"code": "struct MyQueue {\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 MyQueue {\n\n /** Initialize your data structure here. */\n fn new() -> Self {\n\n }\n \n /** Push element x to the back of queue. */\n fn push(&self, x: i32) {\n\n }\n \n /** Removes the element from in front of queue and returns that element. */\n fn pop(&self) -> i32 {\n\n }\n \n /** Get the front element. */\n fn peek(&self) -> i32 {\n\n }\n \n /** Returns whether the queue is empty. */\n fn empty(&self) -> bool {\n\n }\n}\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * let obj = MyQueue::new();\n * obj.push(x);\n * let ret_2: i32 = obj.pop();\n * let ret_3: i32 = obj.peek();\n * let ret_4: bool = obj.empty();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "PHP",
"langSlug": "php",
"code": "class MyQueue {\n /**\n * Initialize your data structure here.\n */\n function __construct() {\n\n }\n\n /**\n * Push element x to the back of queue.\n * @param Integer $x\n * @return NULL\n */\n function push($x) {\n\n }\n\n /**\n * Removes the element from in front of queue and returns that element.\n * @return Integer\n */\n function pop() {\n\n }\n\n /**\n * Get the front element.\n * @return Integer\n */\n function peek() {\n\n }\n\n /**\n * Returns whether the queue is empty.\n * @return Boolean\n */\n function empty() {\n\n }\n}\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * $obj = MyQueue();\n * $obj->push($x);\n * $ret_2 = $obj->pop();\n * $ret_3 = $obj->peek();\n * $ret_4 = $obj->empty();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "TypeScript",
"langSlug": "typescript",
"code": "class MyQueue {\n constructor() {\n\n }\n\n push(x: number): void {\n\n }\n\n pop(): number {\n\n }\n\n peek(): number {\n\n }\n\n empty(): boolean {\n\n }\n}\n\n/**\n * Your MyQueue object will be instantiated and called as such:\n * var obj = new MyQueue()\n * obj.push(x)\n * var param_2 = obj.pop()\n * var param_3 = obj.peek()\n * var param_4 = obj.empty()\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Racket",
"langSlug": "racket",
"code": "(define my-queue%\n (class object%\n (super-new)\n (init-field)\n \n ; push : exact-integer? -> void?\n (define/public (push x)\n\n )\n ; pop : -> exact-integer?\n (define/public (pop)\n\n )\n ; peek : -> exact-integer?\n (define/public (peek)\n\n )\n ; empty : -> boolean?\n (define/public (empty)\n\n )))\n\n;; Your my-queue% object will be instantiated and called as such:\n;; (define obj (new my-queue%))\n;; (send obj push x)\n;; (define param_2 (send obj pop))\n;; (define param_3 (send obj peek))\n;; (define param_4 (send obj empty))",
"__typename": "CodeSnippetNode"
},
{
"lang": "Erlang",
"langSlug": "erlang",
"code": "-spec my_queue_init_() -> any().\nmy_queue_init_() ->\n .\n\n-spec my_queue_push(X :: integer()) -> any().\nmy_queue_push(X) ->\n .\n\n-spec my_queue_pop() -> integer().\nmy_queue_pop() ->\n .\n\n-spec my_queue_peek() -> integer().\nmy_queue_peek() ->\n .\n\n-spec my_queue_empty() -> boolean().\nmy_queue_empty() ->\n .\n\n\n%% Your functions will be called as such:\n%% my_queue_init_(),\n%% my_queue_push(X),\n%% Param_2 = my_queue_pop(),\n%% Param_3 = my_queue_peek(),\n%% Param_4 = my_queue_empty(),\n\n%% my_queue_init_ will be called before every test case, in which you can do some necessary initializations.",
"__typename": "CodeSnippetNode"
},
{
"lang": "Elixir",
"langSlug": "elixir",
"code": "defmodule MyQueue do\n @spec init_() :: any\n def init_() do\n\n end\n\n @spec push(x :: integer) :: any\n def push(x) do\n\n end\n\n @spec pop() :: integer\n def pop() do\n\n end\n\n @spec peek() :: integer\n def peek() do\n\n end\n\n @spec empty() :: boolean\n def empty() do\n\n end\nend\n\n# Your functions will be called as such:\n# MyQueue.init_()\n# MyQueue.push(x)\n# param_2 = MyQueue.pop()\n# param_3 = MyQueue.peek()\n# param_4 = MyQueue.empty()\n\n# MyQueue.init_ will be called before every test case, in which you can do some necessary initializations.",
"__typename": "CodeSnippetNode"
}
],
"stats": "{\"totalAccepted\": \"28.2K\", \"totalSubmission\": \"39.5K\", \"totalAcceptedRaw\": 28177, \"totalSubmissionRaw\": 39457, \"acRate\": \"71.4%\"}",
"hints": [
"队列和栈的主要区别是元素的顺序。队列删除最旧的项,栈删除最新的项。如果你只访问最新的项,那么如何从栈中删除最旧的项?",
"我们可以通过不断地删除最新的项将这些项插入临时栈中来删除栈中最老的项直到得到一个元素为止。然后在检索到最新项后将所有元素返回。与此有关的问题是每次在一行中做几个弹出操作pop将需要O(n)的时间。我们可以优化在一行中连续弹出这一场景吗?"
],
"solution": null,
"status": null,
"sampleTestCase": "[\"MyQueue\",\"push\",\"push\",\"peek\",\"pop\",\"empty\"]\n[[],[1],[2],[],[],[]]",
"metaData": "{\r\n \"classname\": \"MyQueue\",\r\n \"constructor\": {\r\n \"params\": [\r\n {\r\n \"type\": \"integer\",\r\n \"name\": \"maxSize\",\r\n \"lang\": \"c\",\r\n \"value\": \"64000\"\r\n }\r\n ],\r\n \"comment\": \"Initialize your data structure here.\"\r\n },\r\n \"methods\": [\r\n {\r\n \"name\" : \"push\",\r\n \"params\": [\r\n {\r\n \"type\": \"integer\",\r\n \"name\": \"x\"\r\n }\r\n ],\r\n \"return\": {\r\n \"type\": \"void\"\r\n },\r\n \"comment\": \"Push element x to the back of queue.\"\r\n },\r\n {\r\n \"name\" : \"pop\",\r\n \"params\": [\r\n ],\r\n \"return\": {\r\n \"type\": \"integer\"\r\n },\r\n \"comment\": \"Removes the element from in front of queue and returns that element.\"\r\n },\r\n {\r\n \"name\" : \"peek\",\r\n \"params\": [\r\n ],\r\n \"return\": {\r\n \"type\": \"integer\"\r\n },\r\n \"comment\": \"Get the front element.\"\r\n },\r\n {\r\n \"name\" : \"empty\",\r\n \"params\": [\r\n ],\r\n \"return\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"comment\": \"Returns whether the queue is empty.\"\r\n }\r\n ],\r\n \"systemdesign\": true,\r\n \"params\": [\r\n {\r\n \"name\": \"inputs\",\r\n \"type\": \"integer[]\"\r\n },\r\n {\r\n \"name\": \"inputs\",\r\n \"type\": \"integer[]\"\r\n }\r\n ],\r\n \"return\": {\r\n \"type\": \"list<String>\",\r\n \"dealloc\": true\r\n }\r\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": {
"id": "2",
"bookName": "《程序员面试金典(第 6 版)》",
"pressName": "图灵公司",
"source": "《程序员面试金典(第 6 版)》独家授权",
"shortDescription": "英文版Cracking the Coding Interview源自硅谷程序员的面试红宝书",
"fullDescription": "本书是原谷歌资深面试官的经验之作,帮助了许多想要加入脸书、苹果、谷歌等 IT 名企的求职者拿到 Dream offer。本专题的 100+ 编程面试题是在原书基础上精心挑选出来的,帮助你轻松应战 IT 名企技术面试。",
"bookImgUrl": "https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/09/30/book_2.jpg",
"pressImgUrl": "https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2020/02/11/logo20190828-02.png",
"productUrl": "",
"__typename": "CategoryInfoNode"
},
"isSubscribed": false,
"isDailyQuestion": false,
"dailyRecordStatus": null,
"editorType": "CKEDITOR",
"ugcQuestionId": null,
"style": "LEETCODE",
"exampleTestcases": "[\"MyQueue\",\"push\",\"push\",\"peek\",\"pop\",\"empty\"]\n[[],[1],[2],[],[],[]]",
"__typename": "QuestionNode"
}
}
}