diff options
author | Jack Sangdahl <[email protected]> | 2025-02-08 00:25:15 -0700 |
---|---|---|
committer | Jack Sangdahl <[email protected]> | 2025-02-08 00:25:25 -0700 |
commit | f72076c568e27c480a1154b527433077e3884aad (patch) | |
tree | 220a255d87c54d0033c07760ee0365713db45284 /design_number_container.cpp | |
parent | 951d74f5469dafd161eed9a97edef25bd69283ac (diff) | |
download | leetcode-f72076c568e27c480a1154b527433077e3884aad.tar.gz leetcode-f72076c568e27c480a1154b527433077e3884aad.zip |
2349. design a number container system
Diffstat (limited to 'design_number_container.cpp')
-rw-r--r-- | design_number_container.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/design_number_container.cpp b/design_number_container.cpp new file mode 100644 index 0000000..bc37a6a --- /dev/null +++ b/design_number_container.cpp @@ -0,0 +1,39 @@ +// 2349. Design a Number Container System +#include "leetcode.h" + +/* + * design a number container system that can do the following: insert or replace + * a number at the given index in the system or return the smallest index for + * the given number in the system. implement the 'NumberContainers' class. + */ + +class NumberContainers { +private: + unordered_map<int, int> idxs; + unordered_map<int, set<int>> nums; + +public: + void change(int index, int number) { + auto i = idxs.find(index); + if (i != end(idxs)) + nums[i->second].erase(index); + idxs[index] = number; + nums[number].insert(index); + } + int find(int number) { + auto i = nums.find(number); + return i == end(nums) || i->second.empty() ? -1 : *begin(i->second); + } +}; + +int main() { + NumberContainers *obj = new NumberContainers(); + printf("%d\n", obj->find(10)); // expect: -1 + obj->change(2, 10); + obj->change(1, 10); + obj->change(3, 10); + obj->change(5, 10); + printf("%d\n", obj->find(10)); // expect: 1 + obj->change(1, 20); + printf("%d\n", obj->find(10)); // expect: 2 +} |