diff --git a/names/binary_search_tree.py b/names/binary_search_tree.py new file mode 100644 index 000000000..c988009e1 --- /dev/null +++ b/names/binary_search_tree.py @@ -0,0 +1,31 @@ +class Node: + def __init__(self, value): + self.value = value + self.left = None + self.right = None + + def insert(self, value): + if value < self.value: + if self.left is None: + self.left = Node(value) + else: + self.left.insert(value) + else: + if self.right is None: + self.right = Node(value) + else: + self.right.insert(value) + + def contains(self, value): + if self.value == value: + return True + if value < self.value: + if not self.left: + return False + else: + return self.left.contains(value) + else: + if not self.right: + return False + else: + return self.right.contains(value) \ No newline at end of file diff --git a/names/names.py b/names/names.py index ea158997f..e211e1b9c 100644 --- a/names/names.py +++ b/names/names.py @@ -1,4 +1,5 @@ import time +from binary_search_tree import Node start_time = time.time() @@ -13,10 +14,16 @@ duplicates = [] # Return the list of duplicates in this data structure # 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_1 in names_1: +# for name_2 in names_2: +# if name_1 == name_2: +# duplicates.append(name_1) +search_tree = Node("None") +for name in names_1: + search_tree.insert(name) +for name in names_2: + if search_tree.contains(name): + duplicates.append(name) end_time = time.time() print (f"{len(duplicates)} duplicates:\n\n{', '.join(duplicates)}\n\n") @@ -25,4 +32,4 @@ # ---------- Stretch Goal ----------- # Python has built-in tools that allow for a very efficient approach to this problem # What's the best time you can accomplish? Thare are no restrictions on techniques or data -# structures, but you may not import any additional libraries that you did not write yourself. +# structures, but you may not import any additional libraries that you did not write yourself. \ No newline at end of file diff --git a/reverse/reverse.py b/reverse/reverse.py index 6116252d1..dc386d468 100644 --- a/reverse/reverse.py +++ b/reverse/reverse.py @@ -39,4 +39,12 @@ def contains(self, value): return False def reverse_list(self, node, prev): - pass + self.prev = None + current = self.head + + while current is not None: + next_node = current.next_node + current.next_node = prev + prev = current + current = next_node + self.head = prev diff --git a/ring_buffer/ring_buffer.py b/ring_buffer/ring_buffer.py index 37e9fb0dd..fcebb3b3a 100644 --- a/ring_buffer/ring_buffer.py +++ b/ring_buffer/ring_buffer.py @@ -1,9 +1,15 @@ class RingBuffer: def __init__(self, capacity): - pass + self.capacity = capacity + self.storage = [] + self.curr = 0 def append(self, item): - pass + if len(self.storage) == self.capacity: + self.storage[self.curr] = item + self.curr = (self.curr + 1) % self.capacity + else: + self.storage.append(item) def get(self): - pass \ No newline at end of file + return self.storage \ No newline at end of file