Skip to content

Commit b435989

Browse files
committed
update: 添加问题“2349.设计数字容器系统”的代码和题解 (#1134)
cpp - AC,5.42%,31.93% Signed-off-by: LetMeFly666 <[email protected]>
1 parent 837529c commit b435989

8 files changed

+224
-20
lines changed

.commitmsg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
cpp - AC,5.42%,31.93%

AllProblems/_获取首页题目_LeetCode.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,20 @@
1313
import time
1414
import os
1515

16+
"""clean.sh
17+
rm -rf "AllProblems/69.x 的平方根/"
18+
19+
mv "AllProblems/69.x 的平方根 /69.x 的平方根 .md" "AllProblems/69.x 的平方根 /69.x 的平方根.md"
20+
21+
mv "AllProblems/69.x 的平方根 /" "AllProblems/69.x 的平方根/"
22+
23+
rm -rf "AllProblems/LCR 084.全排列 II/"
24+
25+
mv "AllProblems/LCR 084.全排列 II /LCR 084.全排列 II .md" "AllProblems/LCR 084.全排列 II /LCR 084.全排列 II.md"
26+
27+
mv "AllProblems/LCR 084.全排列 II /" "AllProblems/LCR 084.全排列 II/"
28+
"""
29+
1630
START_TIME = time.time()
1731

1832
headers = {"cookie": "LEETCODE_SESSION=你的session"}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* @Author: LetMeFly
3+
* @Date: 2025-09-17 20:30:45
4+
* @LastEditors: LetMeFly.xyz
5+
* @LastEditTime: 2025-09-17 20:58:14
6+
*/
7+
#if defined(_WIN32) || defined(__APPLE__)
8+
#include "_[1,2]toVector.h"
9+
#endif
10+
11+
// class NumberContainers {
12+
// private:
13+
// multiset<int> se;
14+
// public:
15+
// NumberContainers() {
16+
17+
// }
18+
19+
// void change(int index, int number) {
20+
21+
// }
22+
23+
// int find(int number) {
24+
// auto it = se.find(number);
25+
// if (it == se.end()) {
26+
// return -1;
27+
// }
28+
// return it - se.begin();
29+
// }
30+
// };
31+
32+
class NumberContainers {
33+
private:
34+
unordered_map<int, set<int>> num2idx;
35+
unordered_map<int, int> idx2num;
36+
public:
37+
NumberContainers() {
38+
39+
}
40+
41+
void change(int index, int number) {
42+
auto it = idx2num.find(index);
43+
if (it != idx2num.end()) {
44+
int number = (*it).second;
45+
num2idx[number].erase(index);
46+
}
47+
idx2num[index] = number;
48+
num2idx[number].insert(index);
49+
}
50+
51+
int find(int number) {
52+
auto it = num2idx.find(number);
53+
if (it == num2idx.end() || (*it).second.size() == 0) {
54+
return -1;
55+
}
56+
return *(*it).second.begin();
57+
}
58+
};
59+
60+
/**
61+
* Your NumberContainers object will be instantiated and called as such:
62+
* NumberContainers* obj = new NumberContainers();
63+
* obj->change(index,number);
64+
* int param_2 = obj->find(number);
65+
*/

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,7 @@
750750
|2341.数组能形成多少数对|简单|<a href="https://leetcode.cn/problems/maximum-number-of-pairs-in-array/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2023/02/16/LeetCode%202341.%E6%95%B0%E7%BB%84%E8%83%BD%E5%BD%A2%E6%88%90%E5%A4%9A%E5%B0%91%E6%95%B0%E5%AF%B9/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/129055398" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/maximum-number-of-pairs-in-array/solutions/2114353/letmefly-2341shu-zu-neng-xing-cheng-duo-gmmwf/" target="_blank">LeetCode题解</a>|
751751
|2342.数位和相等数对的最大和|中等|<a href="https://leetcode.cn/problems/max-sum-of-a-pair-with-equal-sum-of-digits/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2023/11/18/LeetCode%202342.%E6%95%B0%E4%BD%8D%E5%92%8C%E7%9B%B8%E7%AD%89%E6%95%B0%E5%AF%B9%E7%9A%84%E6%9C%80%E5%A4%A7%E5%92%8C/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/134476645" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/max-sum-of-a-pair-with-equal-sum-of-digits/solutions/2531723/letmefly-2342shu-wei-he-xiang-deng-shu-d-01t1/" target="_blank">LeetCode题解</a>|
752752
|2347.最好的扑克手牌|简单|<a href="https://leetcode.cn/problems/best-poker-hand/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2023/02/20/LeetCode%202347.%E6%9C%80%E5%A5%BD%E7%9A%84%E6%89%91%E5%85%8B%E6%89%8B%E7%89%8C/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/129117439" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/best-poker-hand/solutions/2121811/letmefly-2347zui-hao-de-bu-ke-shou-pai-b-9bp9/" target="_blank">LeetCode题解</a>|
753+
|2349.设计数字容器系统|中等|<a href="https://leetcode.cn/problems/design-a-number-container-system/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2025/09/17/LeetCode%202349.%E8%AE%BE%E8%AE%A1%E6%95%B0%E5%AD%97%E5%AE%B9%E5%99%A8%E7%B3%BB%E7%BB%9F/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/151803541" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/design-a-number-container-system/solutions/3785020/letmefly-2349she-ji-shu-zi-rong-qi-xi-to-k78e/" target="_blank">LeetCode题解</a>|
753754
|2351.第一个出现两次的字母|中等|<a href="https://leetcode.cn/problems/first-letter-to-appear-twice/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2023/01/01/2351.%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%87%BA%E7%8E%B0%E4%B8%A4%E6%AC%A1%E7%9A%84%E5%AD%97%E6%AF%8D/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/128510526" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/first-letter-to-appear-twice/solutions/2039779/letmefly-2351di-yi-ge-chu-xian-liang-ci-bl62e/" target="_blank">LeetCode题解</a>|
754755
|2352.相等行列对|中等|<a href="https://leetcode.cn/problems/equal-row-and-column-pairs/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2023/06/06/LeetCode%202352.%E7%9B%B8%E7%AD%89%E8%A1%8C%E5%88%97%E5%AF%B9/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/131062292" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/equal-row-and-column-pairs/solutions/2298633/letmefly-2352xiang-deng-xing-lie-dui-sho-1hqy/" target="_blank">LeetCode题解</a>|
755756
|2353.设计食物评分系统|中等|<a href="https://leetcode.cn/problems/design-a-food-rating-system/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2025/02/28/LeetCode%202353.%E8%AE%BE%E8%AE%A1%E9%A3%9F%E7%89%A9%E8%AF%84%E5%88%86%E7%B3%BB%E7%BB%9F/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/145926792" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/design-a-food-rating-system/solutions/3588914/letmefly-2353she-ji-shi-wu-ping-fen-xi-t-5gyt/" target="_blank">LeetCode题解</a>|
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
---
2+
title: 2349.设计数字容器系统:双哈希表(要咋查就咋映射)
3+
date: 2025-09-17 21:58:10
4+
tags: [题解, LeetCode, 中等, 设计, 哈希表, map, 有序集合, 堆(优先队列)]
5+
categories: [题解, LeetCode]
6+
---
7+
8+
# 【LetMeFly】2349.设计数字容器系统:双哈希表(要咋查就咋映射)
9+
10+
力扣题目链接:[https://leetcode.cn/problems/design-a-number-container-system/](https://leetcode.cn/problems/design-a-number-container-system/)
11+
12+
<p>设计一个数字容器系统,可以实现以下功能:</p>
13+
14+
<ul>
15+
<li>在系统中给定下标处&nbsp;<strong>插入</strong>&nbsp;或者 <strong>替换</strong>&nbsp;一个数字。</li>
16+
<li><strong>返回</strong>&nbsp;系统中给定数字的最小下标。</li>
17+
</ul>
18+
19+
<p>请你实现一个&nbsp;<code>NumberContainers</code>&nbsp;类:</p>
20+
21+
<ul>
22+
<li><code>NumberContainers()</code>&nbsp;初始化数字容器系统。</li>
23+
<li><code>void change(int index, int number)</code> 在下标&nbsp;<code>index</code>&nbsp;处填入&nbsp;<code>number</code>&nbsp;。如果该下标&nbsp;<code>index</code>&nbsp;处已经有数字了,那么用 <code>number</code>&nbsp;替换该数字。</li>
24+
<li><code>int find(int number)</code>&nbsp;返回给定数字&nbsp;<code>number</code>&nbsp;在系统中的最小下标。如果系统中没有&nbsp;<code>number</code>&nbsp;,那么返回&nbsp;<code>-1</code>&nbsp;。</li>
25+
</ul>
26+
27+
<p>&nbsp;</p>
28+
29+
<p><strong>示例:</strong></p>
30+
31+
<pre>
32+
<strong>输入:</strong>
33+
["NumberContainers", "find", "change", "change", "change", "change", "find", "change", "find"]
34+
[[], [10], [2, 10], [1, 10], [3, 10], [5, 10], [10], [1, 20], [10]]
35+
<strong>输出:</strong>
36+
[null, -1, null, null, null, null, 1, null, 2]
37+
38+
<strong>解释:</strong>
39+
NumberContainers nc = new NumberContainers();
40+
nc.find(10); // 没有数字 10 ,所以返回 -1 。
41+
nc.change(2, 10); // 容器中下标为 2 处填入数字 10 。
42+
nc.change(1, 10); // 容器中下标为 1 处填入数字 10 。
43+
nc.change(3, 10); // 容器中下标为 3 处填入数字 10 。
44+
nc.change(5, 10); // 容器中下标为 5 处填入数字 10 。
45+
nc.find(10); // 数字 10 所在的下标为 1 ,2 ,3 和 5 。因为最小下标为 1 ,所以返回 1 。
46+
nc.change(1, 20); // 容器中下标为 1 处填入数字 20 。注意,下标 1 处之前为 10 ,现在被替换为 20 。
47+
nc.find(10); // 数字 10 所在下标为 2 ,3 和 5 。最小下标为 2 ,所以返回 2 。
48+
</pre>
49+
50+
<p>&nbsp;</p>
51+
52+
<p><strong>提示:</strong></p>
53+
54+
<ul>
55+
<li><code>1 &lt;= index, number &lt;= 10<sup>9</sup></code></li>
56+
<li>调用&nbsp;<code>change</code> 和&nbsp;<code>find</code>&nbsp;的&nbsp;<strong>总次数</strong>&nbsp;不超过&nbsp;<code>10<sup>5</sup></code> 次。</li>
57+
</ul>
58+
59+
60+
61+
## 解题方法:两个哈希表
62+
63+
核心目标有两个:
64+
65+
1. number查index
66+
2. index改number
67+
68+
所以可以建立两个哈希表映射,一个是index映射为number,一个是number映射为index(s)。
69+
70+
一个index只对应一个number,所以使用int2int就行;一个number可能对应多个index,所以可以使用int2有序集合。
71+
72+
+ 时间复杂度$O(\log n)$,其中$n$是表中总数据量
73+
+ 空间复杂度$O(n)$
74+
75+
### AC代码
76+
77+
#### C++
78+
79+
```cpp
80+
/*
81+
* @Author: LetMeFly
82+
* @Date: 2025-09-17 20:30:45
83+
* @LastEditors: LetMeFly.xyz
84+
* @LastEditTime: 2025-09-17 20:58:14
85+
*/
86+
class NumberContainers {
87+
private:
88+
unordered_map<int, set<int>> num2idx;
89+
unordered_map<int, int> idx2num;
90+
public:
91+
NumberContainers() {
92+
93+
}
94+
95+
void change(int index, int number) {
96+
auto it = idx2num.find(index);
97+
if (it != idx2num.end()) {
98+
int number = (*it).second;
99+
num2idx[number].erase(index);
100+
}
101+
idx2num[index] = number;
102+
num2idx[number].insert(index);
103+
}
104+
105+
int find(int number) {
106+
auto it = num2idx.find(number);
107+
if (it == num2idx.end() || (*it).second.size() == 0) {
108+
return -1;
109+
}
110+
return *(*it).second.begin();
111+
}
112+
};
113+
114+
/**
115+
* Your NumberContainers object will be instantiated and called as such:
116+
* NumberContainers* obj = new NumberContainers();
117+
* obj->change(index,number);
118+
* int param_2 = obj->find(number);
119+
*/
120+
```
121+
122+
> 同步发文于[CSDN](https://letmefly.blog.csdn.net/article/details/151803541)和我的[个人博客](https://blog.letmefly.xyz/),原创不易,转载经作者同意后请附上[原文链接](https://blog.letmefly.xyz/2025/09/17/LeetCode%202349.%E8%AE%BE%E8%AE%A1%E6%95%B0%E5%AD%97%E5%AE%B9%E5%99%A8%E7%B3%BB%E7%BB%9F/)哦~
123+
>
124+
> 千篇源码题解[已开源](https://github.com/LetMeFly666/LeetCode)

Solutions/Other-English-LearningNotes-SomeWords.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,7 @@ categories: [自用]
797797
|omit|v. 省略,遗漏|
798798
|scorch|v. 烫坏,烤焦,(使)枯黄,枯萎|
799799
|lemonade|n. 柠檬味汽水,柠檬饮料,一杯/瓶柠檬饮料|
800-
|pertinent|adj. 相关的,切题的,中肯的,恰当的|
800+
|<font color="#28bea0" title="二次复习">pertinent</font>|adj. 相关的,切题的,中肯的,恰当的|
801801
|||
802802
|shrine|n. 神庙,神龛,圣地|
803803
|engrave|v. 在...上雕刻(文字/图案)|
@@ -1000,7 +1000,7 @@ categories: [自用]
10001000
|massacre|n. 屠杀,残杀,(运动/比赛の)惨败<br/>v. 屠杀,杀戮,使(运动/比赛中)惨败|
10011001
|||
10021002
|sonnet|n. 十四行诗,商籁体|
1003-
|<font color="#28bea0" title="二次复习">headlong</font>|adv. 头朝前地,轻率地,莽撞地,慌慌张张的<br/>adj. 轻率的|
1003+
|<font color="#28bea0" title="三次复习">headlong</font>|adv. 头朝前地,轻率地,莽撞地,慌慌张张的<br/>adj. 轻率的|
10041004
|||
10051005
|shadowy|ajd. 昏暗的,阴影中的,朦胧的,神秘的|
10061006
|||
@@ -1441,6 +1441,11 @@ categories: [自用]
14411441
|||
14421442
|statute|n. 法规,法令,章程,条例|
14431443
|immaterial|adj. 无形的,非物质的,无关紧要的,不重要|
1444+
|||
1445+
|triumphant|adj. 大获全胜的,巨大成功的,欢欣鼓舞的,洋洋得意的|
1446+
|impurity|n. 不纯之物,杂质|
1447+
|||
1448+
|emigrant|n. 移民<br/>adj. (向国外)移居的,侨居的|
14441449

14451450
+ 这个web要是能设计得可以闭眼(完全不睁眼)键盘控制背单词就好了。
14461451
+ 也许可以加个AI用最近词编故事功能(返回接口中支持标注所使用单词高亮?)

Solutions/Other-Japanese-LearningNotes.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ xx型
154154
|体操(たいそう)|体操|
155155
|陸上(りくじょう)|田径|
156156
|柔道(じゅうどう)|柔道|
157+
|サーフィン|冲浪|
157158
|見(み)||
158159
|見せ(みせ)|给xx看|
159160
|読み(よみ)||
@@ -244,6 +245,7 @@ xx型
244245
|持ち(もち)|提/有|
245246
|いり|需要|
246247
|コスプレ|角色扮演(cosplay)|
248+
|離れ(はなれ)|离开|
247249
|||
248250
|泣き(なき)||
249251
|||
@@ -280,6 +282,9 @@ xx型
280282
|苺(いちご)|草莓|
281283
|リンゴ|苹果|
282284
|マンゴー|芒果|
285+
|レモン|柠檬|
286+
|スイカ|西瓜|
287+
|レモンのアイスクリーム|柠檬冰激淋|
283288
|きのこ|蘑菇|
284289
|豆腐(とうふ)|豆腐|
285290
|食べ物(たべもの)|食物|
@@ -307,6 +312,8 @@ xx型
307312
|鶏肉(とりにく)|鸡肉|
308313
|チキン|鸡肉|
309314
|サラダ(salad)|沙拉|
315+
|かき氷(かきごおり)|刨冰|
316+
|焼き鳥の店(やきとりのみせ)|烤鸡肉串|
310317
|鉄(てつ)||
311318
|||
312319
|汚い(きたない)|脏的|
@@ -562,6 +569,7 @@ xx型
562569
|歯磨き粉(はみがきこ)|牙膏|
563570
|花火(はなび)|烟花|
564571
|大会(たいかい)|大会|
572+
|日陰(ひかげ)|阴凉处(背阴处)|
565573
|||
566574
|シャツ|衬衫|
567575
|Tシャツ|T恤|
@@ -1467,12 +1475,15 @@ xx型
14671475
|中山さんはトロント出身ですか。<br/>中山先生是多伦多人吗?|
14681476
|どこかに行きませんか。<br/>要不要去某个地方呢?|
14691477
|ちゃんと日焼け止め日焼け止めを使いましょう。<br/>我们好好地用防晒霜吧。|
1470-
|<br/>|
1478+
|ここから離れましょう。<br/>我们从这里离开吧。|
14711479
|<br/>|
14721480
|<br/>|
14731481

14741482
TODO: おしゃれなサングラス サングラス
14751483

1484+
すてきなので、ここで食べませんか。
1485+
1486+
14761487
[单词添加时间](https://github.com/LetMeFly666/LeetCode/blame/master/Solutions/Other-Japanese-LearningNotes.md)
14771488

14781489
<span style="background-color:#ffbd2a; color: white">TODO:</span> 实词用<font color="#28bea0">-</font>色助词用<font color="#ce82ff">-</font>色。

clean.sh

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)