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
3using namespace std;
4
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
10public:
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
36int main()
37{
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}
int find(int number)
Definition main.cpp:25
void change(int index, int number)
Definition main.cpp:13
unordered_map< int, priority_queue< int, vector< int >, greater< int > > > nums
Definition main.cpp:7
unordered_map< int, int > index_to_num
Definition main.cpp:8
int main()
Definition main.cpp:36