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/stack-of-plates-lcci.json
2022-05-02 23:44:12 +08:00

188 lines
29 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": "100195",
"questionFrontendId": "面试题 03.03",
"categoryTitle": "LCCI",
"boundTopicId": 49272,
"title": "Stack of Plates LCCI",
"titleSlug": "stack-of-plates-lcci",
"content": "<p>Imagine a (literal) stack of plates. If the stack gets too high, it might topple. Therefore, in real life, we would likely start a new stack when the previous stack exceeds some threshold. Implement a data structure <code>SetOfStacks</code> that mimics this.&nbsp;<code>SetOfStacks</code> should be composed of several stacks and should create a new stack once the previous one exceeds capacity. <code>SetOfStacks.push()</code> and <code>SetOfStacks.pop()</code> should behave identically to a single stack (that is, <code>pop()</code> should return the same values as it would if there were just a single stack). Follow Up: Implement a function <code>popAt(int index)</code> which performs a pop operation on a specific sub-stack.</p>\r\n\r\n<p>You should delete the sub-stack when it becomes empty. <code>pop</code>, <code>popAt</code> should return -1 when there&#39;s no element to pop.</p>\r\n\r\n<p><strong>Example1:</strong></p>\r\n\r\n<pre>\r\n<strong> Input</strong>: \r\n[&quot;StackOfPlates&quot;, &quot;push&quot;, &quot;push&quot;, &quot;popAt&quot;, &quot;pop&quot;, &quot;pop&quot;]\r\n[[1], [1], [2], [1], [], []]\r\n<strong> Output</strong>: \r\n[null, null, null, 2, 1, -1]\r\n<strong> Explanation</strong>: \r\n</pre>\r\n\r\n<p><strong>Example2:</strong></p>\r\n\r\n<pre>\r\n<strong> Input</strong>: \r\n[&quot;StackOfPlates&quot;, &quot;push&quot;, &quot;push&quot;, &quot;push&quot;, &quot;popAt&quot;, &quot;popAt&quot;, &quot;popAt&quot;]\r\n[[2], [1], [2], [3], [0], [0], [0]]\r\n<strong> Output</strong>: \r\n[null, null, null, null, 2, 1, 3]\r\n</pre>\r\n",
"translatedTitle": "堆盘子",
"translatedContent": "<p>堆盘子。设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构<code>SetOfStacks</code>,模拟这种行为。<code>SetOfStacks</code>应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,<code>SetOfStacks.push()</code>和<code>SetOfStacks.pop()</code>应该与普通栈的操作方法相同也就是说pop()返回的值,应该跟只有一个栈时的情况一样)。 进阶:实现一个<code>popAt(int index)</code>方法根据指定的子栈执行pop操作。</p>\n\n<p>当某个栈为空时,应当删除该栈。当栈中没有元素或不存在该栈时,<code>pop</code><code>popAt</code>&nbsp;应返回 -1.</p>\n\n<p><strong>示例1:</strong></p>\n\n<pre><strong> 输入</strong>\n[&quot;StackOfPlates&quot;, &quot;push&quot;, &quot;push&quot;, &quot;popAt&quot;, &quot;pop&quot;, &quot;pop&quot;]\n[[1], [1], [2], [1], [], []]\n<strong> 输出</strong>\n[null, null, null, 2, 1, -1]\n</pre>\n\n<p><strong>示例2:</strong></p>\n\n<pre><strong> 输入</strong>\n[&quot;StackOfPlates&quot;, &quot;push&quot;, &quot;push&quot;, &quot;push&quot;, &quot;popAt&quot;, &quot;popAt&quot;, &quot;popAt&quot;]\n[[2], [1], [2], [3], [0], [0], [0]]\n<strong> 输出</strong>\n[null, null, null, null, 2, 1, 3]\n</pre>\n",
"isPaidOnly": false,
"difficulty": "Medium",
"likes": 44,
"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": "Linked List",
"slug": "linked-list",
"translatedName": "链表",
"__typename": "TopicTagNode"
}
],
"companyTagStats": null,
"codeSnippets": [
{
"lang": "C++",
"langSlug": "cpp",
"code": "class StackOfPlates {\npublic:\n StackOfPlates(int cap) {\n\n }\n \n void push(int val) {\n\n }\n \n int pop() {\n\n }\n \n int popAt(int index) {\n\n }\n};\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * StackOfPlates* obj = new StackOfPlates(cap);\n * obj->push(val);\n * int param_2 = obj->pop();\n * int param_3 = obj->popAt(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Java",
"langSlug": "java",
"code": "class StackOfPlates {\n\n public StackOfPlates(int cap) {\n\n }\n \n public void push(int val) {\n\n }\n \n public int pop() {\n\n }\n \n public int popAt(int index) {\n\n }\n}\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * StackOfPlates obj = new StackOfPlates(cap);\n * obj.push(val);\n * int param_2 = obj.pop();\n * int param_3 = obj.popAt(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Python",
"langSlug": "python",
"code": "class StackOfPlates(object):\n\n def __init__(self, cap):\n \"\"\"\n :type cap: int\n \"\"\"\n\n\n def push(self, val):\n \"\"\"\n :type val: int\n :rtype: None\n \"\"\"\n\n\n def pop(self):\n \"\"\"\n :rtype: int\n \"\"\"\n\n\n def popAt(self, index):\n \"\"\"\n :type index: int\n :rtype: int\n \"\"\"\n\n\n\n# Your StackOfPlates object will be instantiated and called as such:\n# obj = StackOfPlates(cap)\n# obj.push(val)\n# param_2 = obj.pop()\n# param_3 = obj.popAt(index)",
"__typename": "CodeSnippetNode"
},
{
"lang": "Python3",
"langSlug": "python3",
"code": "class StackOfPlates:\n\n def __init__(self, cap: int):\n\n\n def push(self, val: int) -> None:\n\n\n def pop(self) -> int:\n\n\n def popAt(self, index: int) -> int:\n\n\n\n# Your StackOfPlates object will be instantiated and called as such:\n# obj = StackOfPlates(cap)\n# obj.push(val)\n# param_2 = obj.pop()\n# param_3 = obj.popAt(index)",
"__typename": "CodeSnippetNode"
},
{
"lang": "C",
"langSlug": "c",
"code": "\n\n\ntypedef struct {\n\n} StackOfPlates;\n\n\nStackOfPlates* stackOfPlatesCreate(int cap) {\n\n}\n\nvoid stackOfPlatesPush(StackOfPlates* obj, int val) {\n\n}\n\nint stackOfPlatesPop(StackOfPlates* obj) {\n\n}\n\nint stackOfPlatesPopAt(StackOfPlates* obj, int index) {\n\n}\n\nvoid stackOfPlatesFree(StackOfPlates* obj) {\n\n}\n\n/**\n * Your StackOfPlates struct will be instantiated and called as such:\n * StackOfPlates* obj = stackOfPlatesCreate(cap);\n * stackOfPlatesPush(obj, val);\n \n * int param_2 = stackOfPlatesPop(obj);\n \n * int param_3 = stackOfPlatesPopAt(obj, index);\n \n * stackOfPlatesFree(obj);\n*/",
"__typename": "CodeSnippetNode"
},
{
"lang": "C#",
"langSlug": "csharp",
"code": "public class StackOfPlates {\n\n public StackOfPlates(int cap) {\n\n }\n \n public void Push(int val) {\n\n }\n \n public int Pop() {\n\n }\n \n public int PopAt(int index) {\n\n }\n}\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * StackOfPlates obj = new StackOfPlates(cap);\n * obj.Push(val);\n * int param_2 = obj.Pop();\n * int param_3 = obj.PopAt(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "JavaScript",
"langSlug": "javascript",
"code": "/**\n * @param {number} cap\n */\nvar StackOfPlates = function(cap) {\n\n};\n\n/** \n * @param {number} val\n * @return {void}\n */\nStackOfPlates.prototype.push = function(val) {\n\n};\n\n/**\n * @return {number}\n */\nStackOfPlates.prototype.pop = function() {\n\n};\n\n/** \n * @param {number} index\n * @return {number}\n */\nStackOfPlates.prototype.popAt = function(index) {\n\n};\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * var obj = new StackOfPlates(cap)\n * obj.push(val)\n * var param_2 = obj.pop()\n * var param_3 = obj.popAt(index)\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Ruby",
"langSlug": "ruby",
"code": "class StackOfPlates\n\n=begin\n :type cap: Integer\n=end\n def initialize(cap)\n\n end\n\n\n=begin\n :type val: Integer\n :rtype: Void\n=end\n def push(val)\n\n end\n\n\n=begin\n :rtype: Integer\n=end\n def pop()\n\n end\n\n\n=begin\n :type index: Integer\n :rtype: Integer\n=end\n def pop_at(index)\n\n end\n\n\nend\n\n# Your StackOfPlates object will be instantiated and called as such:\n# obj = StackOfPlates.new(cap)\n# obj.push(val)\n# param_2 = obj.pop()\n# param_3 = obj.pop_at(index)",
"__typename": "CodeSnippetNode"
},
{
"lang": "Swift",
"langSlug": "swift",
"code": "\nclass StackOfPlates {\n\n init(_ cap: Int) {\n\n }\n \n func push(_ val: Int) {\n\n }\n \n func pop() -> Int {\n\n }\n \n func popAt(_ index: Int) -> Int {\n\n }\n}\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * let obj = StackOfPlates(cap)\n * obj.push(val)\n * let ret_2: Int = obj.pop()\n * let ret_3: Int = obj.popAt(index)\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Go",
"langSlug": "golang",
"code": "type StackOfPlates struct {\n\n}\n\n\nfunc Constructor(cap int) StackOfPlates {\n\n}\n\n\nfunc (this *StackOfPlates) Push(val int) {\n\n}\n\n\nfunc (this *StackOfPlates) Pop() int {\n\n}\n\n\nfunc (this *StackOfPlates) PopAt(index int) int {\n\n}\n\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * obj := Constructor(cap);\n * obj.Push(val);\n * param_2 := obj.Pop();\n * param_3 := obj.PopAt(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Scala",
"langSlug": "scala",
"code": "class StackOfPlates(_cap: Int) {\n\n def push(`val`: Int) {\n\n }\n\n def pop(): Int = {\n\n }\n\n def popAt(index: Int): Int = {\n\n }\n\n}\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * var obj = new StackOfPlates(cap)\n * obj.push(`val`)\n * var param_2 = obj.pop()\n * var param_3 = obj.popAt(index)\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Kotlin",
"langSlug": "kotlin",
"code": "class StackOfPlates(cap: Int) {\n\n fun push(`val`: Int) {\n\n }\n\n fun pop(): Int {\n\n }\n\n fun popAt(index: Int): Int {\n\n }\n\n}\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * var obj = StackOfPlates(cap)\n * obj.push(`val`)\n * var param_2 = obj.pop()\n * var param_3 = obj.popAt(index)\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Rust",
"langSlug": "rust",
"code": "struct StackOfPlates {\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 StackOfPlates {\n\n fn new(cap: i32) -> Self {\n\n }\n \n fn push(&self, val: i32) {\n\n }\n \n fn pop(&self) -> i32 {\n\n }\n \n fn pop_at(&self, index: i32) -> i32 {\n\n }\n}\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * let obj = StackOfPlates::new(cap);\n * obj.push(val);\n * let ret_2: i32 = obj.pop();\n * let ret_3: i32 = obj.pop_at(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "PHP",
"langSlug": "php",
"code": "class StackOfPlates {\n /**\n * @param Integer $cap\n */\n function __construct($cap) {\n\n }\n\n /**\n * @param Integer $val\n * @return NULL\n */\n function push($val) {\n\n }\n\n /**\n * @return Integer\n */\n function pop() {\n\n }\n\n /**\n * @param Integer $index\n * @return Integer\n */\n function popAt($index) {\n\n }\n}\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * $obj = StackOfPlates($cap);\n * $obj->push($val);\n * $ret_2 = $obj->pop();\n * $ret_3 = $obj->popAt($index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "TypeScript",
"langSlug": "typescript",
"code": "class StackOfPlates {\n constructor(cap: number) {\n\n }\n\n push(val: number): void {\n\n }\n\n pop(): number {\n\n }\n\n popAt(index: number): number {\n\n }\n}\n\n/**\n * Your StackOfPlates object will be instantiated and called as such:\n * var obj = new StackOfPlates(cap)\n * obj.push(val)\n * var param_2 = obj.pop()\n * var param_3 = obj.popAt(index)\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Racket",
"langSlug": "racket",
"code": "(define stack-of-plates%\n (class object%\n (super-new)\n\n ; cap : exact-integer?\n (init-field\n cap)\n \n ; push : exact-integer? -> void?\n (define/public (push val)\n\n )\n ; pop : -> exact-integer?\n (define/public (pop)\n\n )\n ; pop-at : exact-integer? -> exact-integer?\n (define/public (pop-at index)\n\n )))\n\n;; Your stack-of-plates% object will be instantiated and called as such:\n;; (define obj (new stack-of-plates% [cap cap]))\n;; (send obj push val)\n;; (define param_2 (send obj pop))\n;; (define param_3 (send obj pop-at index))",
"__typename": "CodeSnippetNode"
},
{
"lang": "Erlang",
"langSlug": "erlang",
"code": "-spec stack_of_plates_init_(Cap :: integer()) -> any().\nstack_of_plates_init_(Cap) ->\n .\n\n-spec stack_of_plates_push(Val :: integer()) -> any().\nstack_of_plates_push(Val) ->\n .\n\n-spec stack_of_plates_pop() -> integer().\nstack_of_plates_pop() ->\n .\n\n-spec stack_of_plates_pop_at(Index :: integer()) -> integer().\nstack_of_plates_pop_at(Index) ->\n .\n\n\n%% Your functions will be called as such:\n%% stack_of_plates_init_(Cap),\n%% stack_of_plates_push(Val),\n%% Param_2 = stack_of_plates_pop(),\n%% Param_3 = stack_of_plates_pop_at(Index),\n\n%% stack_of_plates_init_ will be called before every test case, in which you can do some necessary initializations.",
"__typename": "CodeSnippetNode"
},
{
"lang": "Elixir",
"langSlug": "elixir",
"code": "defmodule StackOfPlates do\n @spec init_(cap :: integer) :: any\n def init_(cap) do\n\n end\n\n @spec push(val :: integer) :: any\n def push(val) do\n\n end\n\n @spec pop() :: integer\n def pop() do\n\n end\n\n @spec pop_at(index :: integer) :: integer\n def pop_at(index) do\n\n end\nend\n\n# Your functions will be called as such:\n# StackOfPlates.init_(cap)\n# StackOfPlates.push(val)\n# param_2 = StackOfPlates.pop()\n# param_3 = StackOfPlates.pop_at(index)\n\n# StackOfPlates.init_ will be called before every test case, in which you can do some necessary initializations.",
"__typename": "CodeSnippetNode"
}
],
"stats": "{\"totalAccepted\": \"11.5K\", \"totalSubmission\": \"29.7K\", \"totalAcceptedRaw\": 11523, \"totalSubmissionRaw\": 29727, \"acRate\": \"38.8%\"}",
"hints": [
"你需要追踪每个子栈的大小。当一个栈已满时,你可能需要创建一个新栈。",
"在一个特定的子栈中弹出一个元素意味着一些栈没有满。这是个问题吗?没有正确的答案,但你应该考虑如何处理这个问题。"
],
"solution": null,
"status": null,
"sampleTestCase": "[\"StackOfPlates\", \"push\", \"push\", \"popAt\", \"pop\", \"pop\"]\n[[1], [1], [2], [1], [], []]",
"metaData": "{\"classname\": \"StackOfPlates\", \"maxbytesperline\": 200000, \"systemdesign\": true, \"constructor\": {\"params\": [{\"name\": \"cap\", \"type\": \"integer\"}]}, \"methods\": [{\"name\": \"push\", \"params\": [{\"name\": \"val\", \"type\": \"integer\"}], \"return\": {\"type\": \"void\"}}, {\"name\": \"pop\", \"params\": [], \"return\": {\"type\": \"integer\"}}, {\"name\": \"popAt\", \"params\": [{\"name\": \"index\", \"type\": \"integer\"}], \"return\": {\"type\": \"integer\"}}], \"params\": [{\"name\": \"inputs\", \"type\": \"integer[]\"}, {\"name\": \"inputs\", \"type\": \"integer[]\"}], \"return\": {\"type\": \"list<String>\", \"dealloc\": true}}",
"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": "",
"__typename": "QuestionNode"
}
}
}