aboutsummaryrefslogtreecommitdiff
path: root/design_number_container.py
diff options
context:
space:
mode:
Diffstat (limited to 'design_number_container.py')
-rw-r--r--design_number_container.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/design_number_container.py b/design_number_container.py
new file mode 100644
index 0000000..c343677
--- /dev/null
+++ b/design_number_container.py
@@ -0,0 +1,46 @@
+# 2349. Design a Number Container System
+from collections import defaultdict
+from bisect import insort_left
+
+"""
+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(object):
+ def __init__(self):
+ self.idxs = {}
+ self.nums = defaultdict(list)
+
+ def change(self, index, number):
+ """
+ :type index: int
+ :type number: int
+ :rtype: None
+ """
+ if index in self.idxs:
+ old = self.idxs[index]
+ self.nums[old].remove(index)
+ self.idxs[index] = number
+ insort_left(self.nums[number], index)
+
+ def find(self, number):
+ """
+ :type number: int
+ :rtype: int
+ """
+ return -1 if not self.nums[number] else self.nums[number][0]
+
+
+if __name__ == "__main__":
+ obj = NumberContainers()
+ print(obj.find(10))
+ obj.change(2, 10)
+ obj.change(1, 10)
+ obj.change(3, 10)
+ obj.change(5, 10)
+ print(obj.find(10))
+ obj.change(1, 20)
+ print(obj.find(10))