diff --git a/problem1.py b/problem1.py new file mode 100644 index 00000000..2b72e11f --- /dev/null +++ b/problem1.py @@ -0,0 +1,44 @@ +# https://leetcode.com/problems/implement-queue-using-stacks/ +# Time Complexity amortized O(1) +# Space Complexity O(n) + + +class MyQueue: + + def __init__(self): + self.inst = [] + self.outst = [] + + # arrays work first in last out + # x=[1,2,3] + # x.append(4) + # x.append(5) + # x.pop() + # x=[1,2,3,4] + + def push(self, x: int) -> None: + self.inst.append(x) + + def pop(self) -> int: + if self.empty(): + return -1 + # if outst is empty append data from inst to outst + self.peek() + return self.outst.pop() + + def peek(self) -> int: + if not self.outst: + while self.inst: + self.outst.append(self.inst.pop()) + return self.outst[-1] + + def empty(self) -> bool: + return not self.inst and not self.outst + + +# Your MyQueue object will be instantiated and called as such: +# obj = MyQueue() +# obj.push(x) +# param_2 = obj.pop() +# param_3 = obj.peek() +# param_4 = obj.empty() diff --git a/problem2.py b/problem2.py new file mode 100644 index 00000000..3c129f67 --- /dev/null +++ b/problem2.py @@ -0,0 +1,46 @@ +# https://leetcode.com/problems/search-in-a-sorted-array-of-unknown-size/ +# Time Complexity O(1) here both loops have same range so it wont be m+n +# Space Complexity O(n) +class MyHashMap: + + def __init__(self): + self.primaryBucket = 1000 + self.secondaryBucket = 1000 + self.storage = [None] * self.primaryBucket + + def hash1(self, key): + return key % self.primaryBucket + + def hash2(self, key): + return key // self.secondaryBucket + + def put(self, key: int, value: int) -> None: + primaryIndex = self.hash1(key) + if self.storage[primaryIndex] == None: + if primaryIndex == 0: + self.storage[primaryIndex] = [-1] * (self.secondaryBucket + 1) + else: + self.storage[primaryIndex] = [-1] * (self.secondaryBucket) + secondaryIndex = self.hash2(key) + self.storage[primaryIndex][secondaryIndex] = value + + def get(self, key: int) -> int: + primaryIndex = self.hash1(key) + if self.storage[primaryIndex] == None: + return -1 + secondaryIndex = self.hash2(key) + return self.storage[primaryIndex][secondaryIndex] + + def remove(self, key: int) -> None: + primaryIndex = self.hash1(key) + if not self.storage[primaryIndex]: + return + secondaryIndex = self.hash2(key) + self.storage[primaryIndex][secondaryIndex] = -1 + + +# Your MyHashMap object will be instantiated and called as such: +# obj = MyHashMap() +# obj.put(key,value) +# param_2 = obj.get(key) +# obj.remove(key)