diff --git a/names/bst.py b/names/bst.py new file mode 100644 index 000000000..1a7de45c3 --- /dev/null +++ b/names/bst.py @@ -0,0 +1,29 @@ +class BSTNode: + def __init__(self, value): + self.value = value + self.left = None + self.right = None + + def insert(self, value): + if self.value <= value: + if self.right: + self.right.insert(value) + else: + new_node = BSTNode(value) + self.right = new_node + else: + if self.left: + self.left.insert(value) + else: + new_node = BSTNode(value) + self.left = new_node + + def contains(self, target): + if self.value == target: + return True + elif target > self.value and self.right: + return self.right.contains(target) + elif target < self.value and self.left: + return self.left.contains(target) + + \ No newline at end of file diff --git a/names/names.py b/names/names.py index ea158997f..1ae047d1f 100644 --- a/names/names.py +++ b/names/names.py @@ -1,4 +1,5 @@ import time +from bst import BSTNode start_time = time.time() @@ -11,12 +12,13 @@ f.close() duplicates = [] # Return the list of duplicates in this data structure - +bst = BSTNode("") # Replace the nested for loops below with your improvements -for name_1 in names_1: - for name_2 in names_2: - if name_1 == name_2: - duplicates.append(name_1) +for name in names_1: + bst.insert(name) +for name in names_2: + if bst.contains(name): + duplicates.append(name) end_time = time.time() print (f"{len(duplicates)} duplicates:\n\n{', '.join(duplicates)}\n\n") diff --git a/reverse/reverse.py b/reverse/reverse.py index 6116252d1..76cbf3ba3 100644 --- a/reverse/reverse.py +++ b/reverse/reverse.py @@ -39,4 +39,11 @@ def contains(self, value): return False def reverse_list(self, node, prev): + cur_node = node + while cur_node: + next_node = cur_node.next_node + cur_node.next_node = prev + prev = cur_node + cur_node = next_node + self.head = prev pass diff --git a/ring_buffer/ring_buffer.py b/ring_buffer/ring_buffer.py index 37e9fb0dd..4d485221d 100644 --- a/ring_buffer/ring_buffer.py +++ b/ring_buffer/ring_buffer.py @@ -1,9 +1,18 @@ class RingBuffer: def __init__(self, capacity): - pass + self.list = [] + self.capacity = capacity + self.counter = 0 def append(self, item): - pass + if len(self.list) == self.capacity: + self.list[self.counter] = item + if self.counter + 1 == self.capacity: + self.counter = 0 + else: + self.counter +=1 + else: + self.list.append(item) def get(self): - pass \ No newline at end of file + return self.list \ No newline at end of file