Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d5d3ad8

Browse files
feat: add solutions to lc problem: No.2349 (doocs#3312)
1 parent bf00301 commit d5d3ad8

File tree

10 files changed

+1743
-139
lines changed

10 files changed

+1743
-139
lines changed

‎solution/2300-2399/2349.Design a Number Container System/README.md‎

Lines changed: 579 additions & 45 deletions
Large diffs are not rendered by default.

‎solution/2300-2399/2349.Design a Number Container System/README_EN.md‎

Lines changed: 579 additions & 45 deletions
Large diffs are not rendered by default.

‎solution/2300-2399/2349.Design a Number Container System/Solution.cpp‎

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
11
class NumberContainers {
22
public:
3-
map<int, int> mp;
4-
map<int, set<int>> t;
5-
63
NumberContainers() {
74
}
85

96
void change(int index, int number) {
10-
auto it = mp.find(index);
11-
if (it != mp.end()) {
12-
t[it->second].erase(index);
13-
it->second = number;
14-
} else
15-
mp[index] = number;
16-
t[number].insert(index);
7+
if (d.contains(index)) {
8+
int oldNumber = d[index];
9+
g[oldNumber].erase(index);
10+
if (g[oldNumber].empty()) {
11+
g.erase(oldNumber);
12+
}
13+
}
14+
d[index] = number;
15+
g[number].insert(index);
1716
}
1817

1918
int find(int number) {
20-
auto it = t.find(number);
21-
return it == t.end() || it->second.empty() ? -1 : *it->second.begin();
19+
return g.contains(number) ? *g[number].begin() : -1;
2220
}
21+
22+
private:
23+
unordered_map<int, int> d;
24+
unordered_map<int, set<int>> g;
2325
};
2426

2527
/**

‎solution/2300-2399/2349.Design a Number Container System/Solution.go‎

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,28 @@
11
type NumberContainers struct {
2-
mp map[int]int
3-
t map[int]*redblacktree.Tree
2+
d map[int]int
3+
g map[int]*redblacktree.Tree
44
}
55

66
func Constructor() NumberContainers {
77
return NumberContainers{map[int]int{}, map[int]*redblacktree.Tree{}}
88
}
99

1010
func (this *NumberContainers) Change(index int, number int) {
11-
if num, ok := this.mp[index]; ok {
12-
this.t[num].Remove(index)
11+
if oldNumber, ok := this.d[index]; ok {
12+
this.g[oldNumber].Remove(index)
1313
}
14-
this.mp[index] = number
15-
if this.t[number]==nil {
16-
this.t[number] = redblacktree.NewWithIntComparator()
14+
this.d[index] = number
15+
if _, ok:=this.g[number]; !ok {
16+
this.g[number] = redblacktree.NewWithIntComparator()
1717
}
18-
this.t[number].Put(index, nil)
18+
this.g[number].Put(index, nil)
1919
}
2020

2121
func (this *NumberContainers) Find(number int) int {
22-
s, ok := this.t[number]
23-
if !ok || s.Size() == 0 {
24-
return -1
22+
if ids, ok := this.g[number]; ok && ids.Size() > 0 {
23+
return ids.Left().Key.(int)
2524
}
26-
return s.Left().Key.(int)
25+
return -1
2726
}
2827

2928
/**

‎solution/2300-2399/2349.Design a Number Container System/Solution.java‎

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
class NumberContainers {
2-
private Map<Integer, Integer> mp = new HashMap<>();
3-
private Map<Integer, TreeSet<Integer>> t = new HashMap<>();
2+
private Map<Integer, Integer> d = new HashMap<>();
3+
private Map<Integer, TreeSet<Integer>> g = new HashMap<>();
44

55
public NumberContainers() {
66
}
77

88
public void change(int index, int number) {
9-
if (mp.containsKey(index)) {
10-
int v = mp.get(index);
11-
t.get(v).remove(index);
12-
if (t.get(v).isEmpty()) {
13-
t.remove(v);
14-
}
9+
if (d.containsKey(index)) {
10+
int oldNumber = d.get(index);
11+
g.get(oldNumber).remove(index);
1512
}
16-
mp.put(index, number);
17-
t.computeIfAbsent(number, k -> new TreeSet<>()).add(index);
13+
d.put(index, number);
14+
g.computeIfAbsent(number, k -> new TreeSet<>()).add(index);
1815
}
1916

2017
public int find(int number) {
21-
return t.containsKey(number) ? t.get(number).first() : -1;
18+
var ids = g.get(number);
19+
return ids == null || ids.isEmpty() ? -1 : ids.first();
2220
}
2321
}
2422

‎solution/2300-2399/2349.Design a Number Container System/Solution.py‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@
22

33

44
class NumberContainers:
5+
56
def __init__(self):
6-
self.mp = {}
7-
self.t = defaultdict(SortedSet)
7+
self.d = {}
8+
self.g = defaultdict(SortedSet)
89

910
def change(self, index: int, number: int) -> None:
10-
if index in self.mp:
11-
v = self.mp[index]
12-
self.t[v].remove(index)
13-
self.mp[index] = number
14-
self.t[number].add(index)
11+
if index in self.d:
12+
old_number = self.d[index]
13+
self.g[old_number].remove(index)
14+
self.d[index] = number
15+
self.g[number].add(index)
1516

1617
def find(self, number: int) -> int:
17-
s = self.t[number]
18-
return s[0] if s else -1
18+
ids = self.g[number]
19+
return ids[0] if ids else -1
1920

2021

2122
# Your NumberContainers object will be instantiated and called as such:

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /