aboutsummaryrefslogtreecommitdiff
path: root/design_number_container.cpp
diff options
context:
space:
mode:
authorJack Sangdahl <[email protected]>2025-02-08 00:25:15 -0700
committerJack Sangdahl <[email protected]>2025-02-08 00:25:25 -0700
commitf72076c568e27c480a1154b527433077e3884aad (patch)
tree220a255d87c54d0033c07760ee0365713db45284 /design_number_container.cpp
parent951d74f5469dafd161eed9a97edef25bd69283ac (diff)
downloadleetcode-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.cpp39
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
+}