diff --git a/design_hashset.py b/design_hashset.py new file mode 100644 index 00000000..39f2d71e --- /dev/null +++ b/design_hashset.py @@ -0,0 +1,51 @@ +class MyHashSet: + class Node: + def __init__(self, key): + self.key = key + self.next = None + + def __init__(self): + self.buckets = 1000 + self.storage = [None] * self.buckets + + def getHash(self, key): + return key % self.buckets + + def getPrev(self, head, key): + prev = None + curr = head + while curr != None and curr.key != key: + prev = curr + curr = curr.next + return prev + + def add(self, key): + index = self.getHash(key) + if self.storage[index] == None: + self.storage[index] = self.Node(-1) + self.storage[index].next = self.Node(key) + return + + prev = self.getPrev(self.storage[index], key) + if prev.next == None: + prev.next = self.Node(key) + + def remove(self, key): + index = self.getHash(key) + if self.storage[index] == None: + return + prev = self.getPrev(self.storage[index], key) + if prev.next == None: + return + curr = prev.next + prev.next = curr.next + curr.next = None + + def contains(self, key): + index = self.getHash(key) + if self.storage[index] == None: + return False + prev = self.getPrev(self.storage[index], key) + if prev.next == None: + return False + return True \ No newline at end of file diff --git a/design_min_stack.py b/design_min_stack.py new file mode 100644 index 00000000..a2169860 --- /dev/null +++ b/design_min_stack.py @@ -0,0 +1,20 @@ +class MinStack: + def __init__(self): + self.st = [] + self.min = float('inf') + + def push(self, val: int) -> None: + if val <= self.min: + self.st.append(self.min) + self.min = val + self.st.append(val) + + def pop(self) -> None: + if self.st.pop() == self.min: + self.min = self.st.pop() + + def top(self) -> int: + return self.st[-1] + + def getMin(self) -> int: + return self.min \ No newline at end of file