Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions problem1.py
Original file line number Diff line number Diff line change
@@ -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)
36 changes: 36 additions & 0 deletions problem2.py
Original file line number Diff line number Diff line change
@@ -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()