From f72076c568e27c480a1154b527433077e3884aad Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Sat, 8 Feb 2025 00:25:15 -0700 Subject: 2349. design a number container system --- design_number_container.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 design_number_container.cpp (limited to 'design_number_container.cpp') 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 idxs; + unordered_map> 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 +} -- cgit v1.2.3