From 3a5f0b5eeb9d362d5f2966ef9e73117d977d1196 Mon Sep 17 00:00:00 2001 From: praxpk <23168694+praxpk@users.noreply.github.com> Date: Tue, 23 Dec 2025 19:10:02 -0500 Subject: [PATCH] min stack and hash set --- hash_set.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ min_stack.py | 36 ++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 hash_set.py create mode 100644 min_stack.py diff --git a/hash_set.py b/hash_set.py new file mode 100644 index 00000000..4c5722a5 --- /dev/null +++ b/hash_set.py @@ -0,0 +1,67 @@ +""" +// Time Complexity : + add - o(n) + remove - o(n) + contains - 0(n) +// Space Complexity : o(n) +// Did this code successfully run on Leetcode : yes +// Any problem you faced while coding this : yes, made an error in contains but managed to correct the error +""" + + +class Node: + def __init__(self, val, nxt=None, prev=None): + self.val = val + self.next = nxt + self.prev = prev + + +class MyHashSet: + + def __init__(self): + self.prime_mod = 997 + self.set_list = [None] * self.prime_mod + + def add(self, key: int) -> None: + index = key % self.prime_mod + val_node = Node(key) + if ptr := self.set_list[index]: + while ptr: + if ptr.val == key: + return + if not ptr.next: + ptr.next = val_node + val_node.prev = ptr + return + ptr = ptr.next + else: + dummy = Node(None) + dummy.next = val_node + val_node.prev = dummy + self.set_list[index] = dummy + + def remove(self, key: int) -> None: + index = key % self.prime_mod + if head := self.set_list[index]: + ptr = head.next + while ptr: + if ptr.val == key: + prev = ptr.prev + nxt = ptr.next + prev.next = nxt + if nxt: + nxt.prev = prev + if prev == head and not head.next: + self.set_list[index] = None + return + ptr = ptr.next + + def contains(self, key: int) -> bool: + index = key % self.prime_mod + if head := self.set_list[index]: + ptr = head.next + while ptr: + if ptr.val == key: + return True + ptr = ptr.next + return False diff --git a/min_stack.py b/min_stack.py new file mode 100644 index 00000000..d50c16d1 --- /dev/null +++ b/min_stack.py @@ -0,0 +1,36 @@ +""" +// Time Complexity : + push - o(1) + pop - o(1) + top - 0(1) + get_min - o(1) +// Space Complexity : o(n) +// Did this code successfully run on Leetcode : yes +// Any problem you faced while coding this : yes, knew I had to use two stacks but had doubts with my approach, had to look at editorial to +confirm my approach was right +""" + + +class MinStack: + + def __init__(self): + self.stack = [] + self.mins = [] + + def push(self, val: int) -> None: + self.stack.append(val) + if not self.mins: + self.mins.append(val) + elif self.mins[-1] >= val: + self.mins.append(val) + + def pop(self) -> None: + element = self.stack.pop() + if self.mins[-1] == element: + self.mins.pop() + + def top(self) -> int: + return self.stack[-1] + + def getMin(self) -> int: + return self.mins[-1]