diff --git a/problem1.py b/problem1.py new file mode 100644 index 00000000..7e277b7a --- /dev/null +++ b/problem1.py @@ -0,0 +1,64 @@ +class MyHashSet: + + def __init__(self): + self.keyRange = 769 + self.bucketArray = [Bucket() for i in range(self.keyRange)] + + def _hash(self,key): + return key % self.keyRange + + def add(self, key: int) -> None: + bucketIndex = self._hash(key) + self.bucketArray[bucketIndex].insert(key) + + def remove(self, key: int) -> None: + bucketIndex = self._hash(key) + self.bucketArray[bucketIndex].delete(key) + + def contains(self, key: int) -> bool: + bucketIndex = self._hash(key) + return self.bucketArray[bucketIndex].exists(key) + +class Node: + def __init__(self, value, nextNode=None): + self.value = value + self.next = nextNode + +class Bucket: + def __init__(self): + # a pseudo head + self.head = Node(0) + + def insert(self, newValue): + # if not existed, add the new element to the head. + if not self.exists(newValue): + newNode = Node(newValue, self.head.next) + # set the new head. + self.head.next = newNode + + def delete(self, value): + prev = self.head + curr = self.head.next + while curr is not None: + if curr.value == value: + # remove the current node + prev.next = curr.next + return + prev = curr + curr = curr.next + + def exists(self, value): + curr = self.head.next + while curr is not None: + if curr.value == value: + # value existed already, do nothing + return True + curr = curr.next + return False + + +# Your MyHashSet object will be instantiated and called as such: +# obj = MyHashSet() +# obj.add(key) +# obj.remove(key) +# param_3 = obj.contains(key) \ No newline at end of file diff --git a/problem2.py b/problem2.py new file mode 100644 index 00000000..1c17748e --- /dev/null +++ b/problem2.py @@ -0,0 +1,36 @@ +# time: O(n) +# space: O(n) + +class MinStack: + + def __init__(self): + self.stack = [] + self.minStack = [] + + def push(self, val: int) -> None: + self.stack.append(val) + if self.minStack and val <= self.minStack[-1]: + self.minStack.append(val) + elif len(self.minStack)==0: + self.minStack.append(val) + + def pop(self) -> None: + if self.stack[-1] == self.minStack[-1]: + self.minStack.pop() + self.stack.pop() + + + def top(self) -> int: + return self.stack[-1] + + def getMin(self) -> int: + return self.minStack[-1] + + + +# Your MinStack object will be instantiated and called as such: +# obj = MinStack() +# obj.push(val) +# obj.pop() +# param_3 = obj.top() +# param_4 = obj.getMin() \ No newline at end of file