design-a-number-container-system
1.0.0
Design a Number Container System
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1
#include <bits/stdc++.h>
2
3
using namespace
std;
4
5
class
NumberContainers
6
{
7
unordered_map<int, priority_queue<int, vector<int>, greater<int>>>
nums
;
// (number, smallest index)
8
unordered_map<int, int>
index_to_num
;
// (index, number)
9
10
public
:
11
NumberContainers
() {}
12
13
void
change
(
int
index,
int
number)
14
{
15
if
(
index_to_num
.find(index) !=
index_to_num
.end())
16
{
17
int
old_num =
index_to_num
[index];
18
if
(old_num != number)
// mark old index as invalid
19
nums
[old_num].push(INT_MAX);
20
}
21
index_to_num
[index] = number;
22
nums
[number].push(index);
23
}
24
25
int
find
(
int
number)
26
{
27
while
(!
nums
[number].empty() &&
index_to_num
[
nums
[number].top()] != number)
28
nums
[number].pop();
// remove invalid indices
29
if
(
nums
[number].empty())
30
return
-1;
31
else
32
return
nums
[number].top();
33
}
34
};
35
36
int
main
()
37
{
38
NumberContainers
n;
39
cout << n.
find
(10) <<
'\n'
;
40
n.
change
(2, 10);
41
n.
change
(1, 10);
42
n.
change
(3, 10);
43
n.
change
(5, 10);
44
cout << n.
find
(10) <<
'\n'
;
45
n.
change
(1, 20);
46
cout << n.
find
(10) <<
'\n'
;
47
return
0;
48
}
NumberContainers
Definition
main.cpp:6
NumberContainers::find
int find(int number)
Definition
main.cpp:25
NumberContainers::change
void change(int index, int number)
Definition
main.cpp:13
NumberContainers::nums
unordered_map< int, priority_queue< int, vector< int >, greater< int > > > nums
Definition
main.cpp:7
NumberContainers::NumberContainers
NumberContainers()
Definition
main.cpp:11
NumberContainers::index_to_num
unordered_map< int, int > index_to_num
Definition
main.cpp:8
main
int main()
Definition
main.cpp:36
main.cpp
Generated by
1.9.8