1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-10 18:48:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/originData/IQvJ9i.json

193 lines
30 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": "1000147",
"questionFrontendId": "LCP 27",
"categoryTitle": "Algorithms",
"boundTopicId": 401338,
"title": "黑盒光线反射",
"titleSlug": "IQvJ9i",
"content": "English description is not available for the problem. Please switch to Chinese.",
"translatedTitle": "黑盒光线反射",
"translatedContent": "秋日市集上有个奇怪的黑盒,黑盒的主视图为 n\\*m 的矩形。从黑盒的主视图来看,黑盒的上面和下面各均匀分布有 m 个小孔,黑盒的左面和右面各均匀分布有 n 个小孔。黑盒左上角小孔序号为 0按顺时针编号总共有 2*(m+n) 个小孔。每个小孔均可以打开或者关闭,初始时,所有小孔均处于关闭状态。每个小孔上的盖子均为镜面材质。例如一个 2\\*3 的黑盒主视图与其小孔分布如图所示:\n\n![image.png](https://pic.leetcode-cn.com/1598951281-ZCBrif-image.png){:height=\"200px\"}\n\n店长告诉小扣这里是「几何学的快问快答」店长可能有两种操作\n\n- `open(int index, int direction)` - 若小孔处于关闭状态,则打开小孔,照入光线;否则直接照入光线;\n- `close(int index)` - 关闭处于打开状态小孔,店长保证不会关闭已处于关闭状态的小孔;\n\n其中\n- `index` 表示小孔序号\n- `direction``1` 表示光线沿 $y=x$ 方向,`-1` 表示光线沿 $y=-x$ 方向。\n\n![image.png](https://pic.leetcode-cn.com/1599620810-HdOlMi-image.png){:height=\"200px\"}\n\n\n当光线照至边界时若边界上的小孔为开启状态则光线会射出否则光线会在小孔之间进行反射。特别地\n1. 若光线射向未打开的拐角(黑盒顶点),则光线会原路反射回去;\n2. 光线自拐角处的小孔照入时,只有一种入射方向(如自序号为 0 的小孔照入方向只能为 `-1`\n\n![image.png](https://pic.leetcode-cn.com/1598953840-DLiAsf-image.png){:height=\"200px\"}\n\n请帮助小扣判断并返回店长每次照入的光线从几号小孔射出。\n\n\n**示例 1**\n>输入:\n>`[\"BlackBox\",\"open\",\"open\",\"open\",\"close\",\"open\"]`\n>`[[2,3],[6,-1],[4,-1],[0,-1],[6],[0,-1]]`\n>\n>输出:`[null,6,4,6,null,4]`\n>\n>解释:\n>BlackBox b = BlackBox(2,3); // 新建一个 2x3 的黑盒\n>b.open(6,-1) // 打开 6 号小孔,并沿 y=-x 方向照入光线,光线至 0 号小孔反射,从 6 号小孔射出\n>b.open(4,-1) // 打开 4 号小孔,并沿 y=-x 方向照入光线,光线轨迹为 4-2-8-2-4从 4 号小孔射出\n>b.open(0,-1) // 打开 0 号小孔,并沿 y=-x 方向照入光线,由于 6 号小孔为开启状态,光线从 6 号小孔射出\n>b.close(6) // 关闭 6 号小孔\n>b.shoot(0,-1) // 从 0 号小孔沿 y=-x 方向照入光线,由于 6 号小孔为关闭状态4 号小孔为开启状态,光线轨迹为 0-6-4从 4 号小孔射出\n\n**示例 2**\n>输入:\n>`[\"BlackBox\",\"open\",\"open\",\"open\",\"open\",\"close\",\"open\",\"close\",\"open\"]`\n>`[[3,3],[1,-1],[5,1],[11,-1],[11,1],[1],[11,1],[5],[11,-1]]`\n>\n>输出:`[null,1,1,5,1,null,5,null,11]`\n>\n>解释:\n>\n>![image.png](https://pic.leetcode-cn.com/1599204202-yGDMVk-image.png){:height=\"300px\"}\n>\n>BlackBox b = BlackBox(3,3); // 新建一个 3x3 的黑盒\n>b.open(1,-1) // 打开 1 号小孔,并沿 y=-x 方向照入光线,光线轨迹为 1-5-7-11-1从 1 号小孔射出\n>b.open(5,1) // 打开 5 号小孔,并沿 y=x 方向照入光线,光线轨迹为 5-7-11-1从 1 号小孔射出\n>b.open(11,-1) // 打开 11 号小孔,并沿逆 y=-x 方向照入光线,光线轨迹为 11-7-5从 5 号小孔射出\n>b.open(11,1) // 从 11 号小孔沿 y=x 方向照入光线,光线轨迹为 11-1从 1 号小孔射出\n>b.close(1) // 关闭 1 号小孔\n>b.open(11,1) // 从 11 号小孔沿 y=x 方向照入光线,光线轨迹为 11-1-5从 5 号小孔射出\n>b.close(5) // 关闭 5 号小孔\n>b.open(11,-1) // 从 11 号小孔沿 y=-x 方向照入光线,光线轨迹为 11-1-5-7-11从 11 号小孔射出\n\n\n\n**提示:**\n- `1 <= n, m <= 10000`\n- `1 <= 操作次数 <= 10000`\n- `direction` 仅为 `1` 或 `-1`\n- `0 <= index < 2*(m+n)`\n",
"isPaidOnly": false,
"difficulty": "Hard",
"likes": 20,
"dislikes": 0,
"isLiked": null,
"similarQuestions": "[]",
"contributors": [
{
"username": "LeetCode",
"profileUrl": "/u/leetcode",
"avatarUrl": "https://assets.leetcode.cn/aliyun-lc-upload/uploaded_files/2021/03/73c9f099-abbe-4d94-853f-f8abffd459cd/leetcode.png",
"__typename": "ContributorNode"
}
],
"langToValidPlayground": "{\"cpp\": false, \"java\": false, \"python\": false, \"python3\": false, \"mysql\": false, \"mssql\": false, \"oraclesql\": false, \"c\": false, \"csharp\": false, \"javascript\": false, \"typescript\": false, \"bash\": false, \"php\": false, \"swift\": false, \"kotlin\": false, \"dart\": false, \"golang\": false, \"ruby\": false, \"scala\": false, \"html\": false, \"pythonml\": false, \"rust\": false, \"racket\": false, \"erlang\": false, \"elixir\": false, \"pythondata\": false, \"react\": false, \"vanillajs\": false, \"postgresql\": false}",
"topicTags": [
{
"name": "Design",
"slug": "design",
"translatedName": "设计",
"__typename": "TopicTagNode"
},
{
"name": "Segment Tree",
"slug": "segment-tree",
"translatedName": "线段树",
"__typename": "TopicTagNode"
},
{
"name": "Math",
"slug": "math",
"translatedName": "数学",
"__typename": "TopicTagNode"
},
{
"name": "Ordered Set",
"slug": "ordered-set",
"translatedName": "有序集合",
"__typename": "TopicTagNode"
}
],
"companyTagStats": null,
"codeSnippets": [
{
"lang": "C++",
"langSlug": "cpp",
"code": "class BlackBox {\npublic:\n BlackBox(int n, int m) {\n\n }\n \n int open(int index, int direction) {\n\n }\n \n void close(int index) {\n\n }\n};\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * BlackBox* obj = new BlackBox(n, m);\n * int param_1 = obj->open(index,direction);\n * obj->close(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Java",
"langSlug": "java",
"code": "class BlackBox {\n\n public BlackBox(int n, int m) {\n\n }\n \n public int open(int index, int direction) {\n\n }\n \n public void close(int index) {\n\n }\n}\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * BlackBox obj = new BlackBox(n, m);\n * int param_1 = obj.open(index,direction);\n * obj.close(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Python",
"langSlug": "python",
"code": "class BlackBox(object):\n\n def __init__(self, n, m):\n \"\"\"\n :type n: int\n :type m: int\n \"\"\"\n\n\n def open(self, index, direction):\n \"\"\"\n :type index: int\n :type direction: int\n :rtype: int\n \"\"\"\n\n\n def close(self, index):\n \"\"\"\n :type index: int\n :rtype: None\n \"\"\"\n\n\n\n# Your BlackBox object will be instantiated and called as such:\n# obj = BlackBox(n, m)\n# param_1 = obj.open(index,direction)\n# obj.close(index)",
"__typename": "CodeSnippetNode"
},
{
"lang": "Python3",
"langSlug": "python3",
"code": "class BlackBox:\n\n def __init__(self, n: int, m: int):\n\n\n def open(self, index: int, direction: int) -> int:\n\n\n def close(self, index: int) -> None:\n\n\n\n# Your BlackBox object will be instantiated and called as such:\n# obj = BlackBox(n, m)\n# param_1 = obj.open(index,direction)\n# obj.close(index)",
"__typename": "CodeSnippetNode"
},
{
"lang": "C",
"langSlug": "c",
"code": "\n\n\ntypedef struct {\n\n} BlackBox;\n\n\nBlackBox* blackBoxCreate(int n, int m) {\n\n}\n\nint blackBoxOpen(BlackBox* obj, int index, int direction) {\n\n}\n\nvoid blackBoxClose(BlackBox* obj, int index) {\n\n}\n\nvoid blackBoxFree(BlackBox* obj) {\n\n}\n\n/**\n * Your BlackBox struct will be instantiated and called as such:\n * BlackBox* obj = blackBoxCreate(n, m);\n * int param_1 = blackBoxOpen(obj, index, direction);\n \n * blackBoxClose(obj, index);\n \n * blackBoxFree(obj);\n*/",
"__typename": "CodeSnippetNode"
},
{
"lang": "C#",
"langSlug": "csharp",
"code": "public class BlackBox {\n\n public BlackBox(int n, int m) {\n\n }\n \n public int Open(int index, int direction) {\n\n }\n \n public void Close(int index) {\n\n }\n}\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * BlackBox obj = new BlackBox(n, m);\n * int param_1 = obj.Open(index,direction);\n * obj.Close(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "JavaScript",
"langSlug": "javascript",
"code": "/**\n * @param {number} n\n * @param {number} m\n */\nvar BlackBox = function(n, m) {\n\n};\n\n/** \n * @param {number} index \n * @param {number} direction\n * @return {number}\n */\nBlackBox.prototype.open = function(index, direction) {\n\n};\n\n/** \n * @param {number} index\n * @return {void}\n */\nBlackBox.prototype.close = function(index) {\n\n};\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * var obj = new BlackBox(n, m)\n * var param_1 = obj.open(index,direction)\n * obj.close(index)\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "TypeScript",
"langSlug": "typescript",
"code": "class BlackBox {\n constructor(n: number, m: number) {\n\n }\n\n open(index: number, direction: number): number {\n\n }\n\n close(index: number): void {\n\n }\n}\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * var obj = new BlackBox(n, m)\n * var param_1 = obj.open(index,direction)\n * obj.close(index)\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "PHP",
"langSlug": "php",
"code": "class BlackBox {\n /**\n * @param Integer $n\n * @param Integer $m\n */\n function __construct($n, $m) {\n\n }\n\n /**\n * @param Integer $index\n * @param Integer $direction\n * @return Integer\n */\n function open($index, $direction) {\n\n }\n\n /**\n * @param Integer $index\n * @return NULL\n */\n function close($index) {\n\n }\n}\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * $obj = BlackBox($n, $m);\n * $ret_1 = $obj->open($index, $direction);\n * $obj->close($index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Swift",
"langSlug": "swift",
"code": "\nclass BlackBox {\n\n init(_ n: Int, _ m: Int) {\n\n }\n \n func open(_ index: Int, _ direction: Int) -> Int {\n\n }\n \n func close(_ index: Int) {\n\n }\n}\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * let obj = BlackBox(n, m)\n * let ret_1: Int = obj.open(index, direction)\n * obj.close(index)\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Kotlin",
"langSlug": "kotlin",
"code": "class BlackBox(n: Int, m: Int) {\n\n fun open(index: Int, direction: Int): Int {\n\n }\n\n fun close(index: Int) {\n\n }\n\n}\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * var obj = BlackBox(n, m)\n * var param_1 = obj.open(index,direction)\n * obj.close(index)\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Dart",
"langSlug": "dart",
"code": "class BlackBox {\n\n BlackBox(int n, int m) {\n\n }\n \n int open(int index, int direction) {\n\n }\n \n void close(int index) {\n\n }\n}\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * BlackBox obj = BlackBox(n, m);\n * int param1 = obj.open(index,direction);\n * obj.close(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Go",
"langSlug": "golang",
"code": "type BlackBox struct {\n\n}\n\n\nfunc Constructor(n int, m int) BlackBox {\n\n}\n\n\nfunc (this *BlackBox) Open(index int, direction int) int {\n\n}\n\n\nfunc (this *BlackBox) Close(index int) {\n\n}\n\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * obj := Constructor(n, m);\n * param_1 := obj.Open(index,direction);\n * obj.Close(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Ruby",
"langSlug": "ruby",
"code": "class BlackBox\n\n=begin\n :type n: Integer\n :type m: Integer\n=end\n def initialize(n, m)\n\n end\n\n\n=begin\n :type index: Integer\n :type direction: Integer\n :rtype: Integer\n=end\n def open(index, direction)\n\n end\n\n\n=begin\n :type index: Integer\n :rtype: Void\n=end\n def close(index)\n\n end\n\n\nend\n\n# Your BlackBox object will be instantiated and called as such:\n# obj = BlackBox.new(n, m)\n# param_1 = obj.open(index, direction)\n# obj.close(index)",
"__typename": "CodeSnippetNode"
},
{
"lang": "Scala",
"langSlug": "scala",
"code": "class BlackBox(_n: Int, _m: Int) {\n\n def open(index: Int, direction: Int): Int = {\n\n }\n\n def close(index: Int) {\n\n }\n\n}\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * var obj = new BlackBox(n, m)\n * var param_1 = obj.open(index,direction)\n * obj.close(index)\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Rust",
"langSlug": "rust",
"code": "struct BlackBox {\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 BlackBox {\n\n fn new(n: i32, m: i32) -> Self {\n\n }\n \n fn open(&self, index: i32, direction: i32) -> i32 {\n\n }\n \n fn close(&self, index: i32) {\n\n }\n}\n\n/**\n * Your BlackBox object will be instantiated and called as such:\n * let obj = BlackBox::new(n, m);\n * let ret_1: i32 = obj.open(index, direction);\n * obj.close(index);\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Racket",
"langSlug": "racket",
"code": "(define black-box%\n (class object%\n (super-new)\n\n ; n : exact-integer?\n\n ; m : exact-integer?\n (init-field\n n\n m)\n \n ; open : exact-integer? exact-integer? -> exact-integer?\n (define/public (open index direction)\n\n )\n ; close : exact-integer? -> void?\n (define/public (close index)\n\n )))\n\n;; Your black-box% object will be instantiated and called as such:\n;; (define obj (new black-box% [n n] [m m]))\n;; (define param_1 (send obj open index direction))\n;; (send obj close index)",
"__typename": "CodeSnippetNode"
},
{
"lang": "Erlang",
"langSlug": "erlang",
"code": "-spec black_box_init_(N :: integer(), M :: integer()) -> any().\nblack_box_init_(N, M) ->\n .\n\n-spec black_box_open(Index :: integer(), Direction :: integer()) -> integer().\nblack_box_open(Index, Direction) ->\n .\n\n-spec black_box_close(Index :: integer()) -> any().\nblack_box_close(Index) ->\n .\n\n\n%% Your functions will be called as such:\n%% black_box_init_(N, M),\n%% Param_1 = black_box_open(Index, Direction),\n%% black_box_close(Index),\n\n%% black_box_init_ will be called before every test case, in which you can do some necessary initializations.",
"__typename": "CodeSnippetNode"
},
{
"lang": "Elixir",
"langSlug": "elixir",
"code": "defmodule BlackBox do\n @spec init_(n :: integer, m :: integer) :: any\n def init_(n, m) do\n\n end\n\n @spec open(index :: integer, direction :: integer) :: integer\n def open(index, direction) do\n\n end\n\n @spec close(index :: integer) :: any\n def close(index) do\n\n end\nend\n\n# Your functions will be called as such:\n# BlackBox.init_(n, m)\n# param_1 = BlackBox.open(index, direction)\n# BlackBox.close(index)\n\n# BlackBox.init_ will be called before every test case, in which you can do some necessary initializations.",
"__typename": "CodeSnippetNode"
}
],
"stats": "{\"totalAccepted\": \"1.7K\", \"totalSubmission\": \"5K\", \"totalAcceptedRaw\": 1721, \"totalSubmissionRaw\": 4963, \"acRate\": \"34.7%\"}",
"hints": [],
"solution": null,
"status": null,
"sampleTestCase": "[\"BlackBox\",\"open\",\"open\",\"open\",\"close\",\"open\"]\n[[2,3],[6,-1],[4,-1],[0,-1],[6],[0,-1]]",
"metaData": "{\"classname\": \"BlackBox\", \"maxbytesperline\": 200000, \"systemdesign\": true, \"constructor\": {\"params\": [{\"name\": \"n\", \"type\": \"integer\"}, {\"name\": \"m\", \"type\": \"integer\"}]}, \"methods\": [{\"name\": \"open\", \"params\": [{\"name\": \"index\", \"type\": \"integer\"}, {\"name\": \"direction\", \"type\": \"integer\"}], \"return\": {\"type\": \"integer\"}}, {\"name\": \"close\", \"params\": [{\"name\": \"index\", \"type\": \"integer\"}], \"return\": {\"type\": \"void\"}}], \"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++ 20\\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\\u7528GNU11\\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>\"],\"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\\/tree\\/fb4fdb984834421279aeb081df7af624d17c2a03\\\" target=\\\"_blank\\\"> datastructures-js\\/priority-queue@5.3.0<\\/a> \\u548c <a href=\\\"https:\\/\\/github.com\\/datastructures-js\\/queue\\/tree\\/e63563025a5a805aa16928cb53bcd517bfea9230\\\" target=\\\"_blank\\\"> datastructures-js\\/queue@4.2.1<\\/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.21<\\/code><\\/p>\\r\\n\\r\\n<p>\\u652f\\u6301 <a href=\\\"https:\\/\\/github.com\\/emirpasic\\/gods\\/tree\\/v1.18.1\\\" target=\\\"_blank\\\">https:\\/\\/godoc.org\\/github.com\\/emirpasic\\/gods@v1.18.1<\\/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.9.0<\\/code><\\/p>\\r\\n\\r\\n<p>\\u6211\\u4eec\\u4f7f\\u7528\\u7684\\u662f JetBrains \\u63d0\\u4f9b\\u7684 experimental compiler\\u3002\\u5982\\u679c\\u60a8\\u8ba4\\u4e3a\\u60a8\\u9047\\u5230\\u4e86\\u7f16\\u8bd1\\u5668\\u76f8\\u5173\\u7684\\u95ee\\u9898\\uff0c\\u8bf7\\u5411\\u6211\\u4eec\\u53cd\\u9988<\\/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 5.1.6<\\/p>\\r\\n\\r\\n<p>Compile Options: --alwaysStrict --strictBindCallApply --strictFunctionTypes --target ES2022<\\/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\\/tree\\/fb4fdb984834421279aeb081df7af624d17c2a03\\\" target=\\\"_blank\\\"> datastructures-js\\/priority-queue@5.3.0<\\/a> \\u548c <a href=\\\"https:\\/\\/github.com\\/datastructures-js\\/queue\\/tree\\/e63563025a5a805aa16928cb53bcd517bfea9230\\\" target=\\\"_blank\\\"> datastructures-js\\/queue@4.2.1<\\/a>\\u3002<\\/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\"],\"dart\":[\"Dart\",\"<p>Dart 2.17.3<\\/p>\\r\\n\\r\\n<p>\\u60a8\\u7684\\u4ee3\\u7801\\u5c06\\u4f1a\\u88ab\\u4e0d\\u7f16\\u8bd1\\u76f4\\u63a5\\u8fd0\\u884c<\\/p>\"]}",
"book": null,
"isSubscribed": false,
"isDailyQuestion": false,
"dailyRecordStatus": null,
"editorType": "MARKDOWN",
"ugcQuestionId": null,
"style": "LEETCODE",
"exampleTestcases": "[\"BlackBox\",\"open\",\"open\",\"open\",\"close\",\"open\"]\n[[2,3],[6,-1],[4,-1],[0,-1],[6],[0,-1]]\n[\"BlackBox\",\"open\",\"open\",\"open\",\"open\",\"close\",\"open\",\"close\",\"open\"]\n[[3,3],[1,-1],[5,1],[11,-1],[11,1],[1],[11,1],[5],[11,-1]]",
"__typename": "QuestionNode"
}
}
}