Master the Coding Interview

Run Settings
LanguagePython
Language Version
Run Command
# Given two arrays, create a function that # lets a user know (true/false) whether # these two arrays contain any common items. import time # Brute force solution def doArraysHaveCommonItems1(x, y): for i in range(len(x)): for j in range(len(y)): if x[i] == y[j]: print("True") return True return False # Optimized solution def doArraysHaveCommonItems2(x, y): # Create a set from first array x_set = set(x) # Only loop through one array for item in y: if item in x_set: print("True") return True return False a = [1, 2, 4, 7] b = [3, 5, 7, 8] start = time.time() doArraysHaveCommonItems1(a, b) end = time.time() t1 = end - start print(str(t1) + " secs") start = time.time() doArraysHaveCommonItems2(a, b) end = time.time() t2 = end - start print(str(t2) + " secs") # Create a function that reverses a string. def reverseString(s): l = 0 r = len(s) - 1 s = list(s) while l < r: s[l], s[r] = s[r], s[l] l += 1 r -= 1 return ''.join(s) # Merge two sorted arrays def mergeSortedArrays(a, b): res = [] i = j = 0 while i < len(a) and j < len(b): if a[i] < b[j]: res.append(a[i]) i += 1 elif b[j] < a[i]: res.append(b[j]) j += 1 else: res.append(a[i]) res.append(b[j]) i += 1 j += 1 return res class HashTable: def __init__(self, size): self.size = size self.data = [[]] * (size) def _hash(self, key): hash_value = 0 for i in range(len(key)): hash_value = (hash_value + ord(key[i]) * i) % len(self.data) return hash_value def set(self, key, value): address = self._hash(key) if not self.data[address]: self.data[address] = [] self.data[address].append([key, value]) return self.data def get(self, key): address = self._hash(key) currentBucket = self.data[address] print(currentBucket) if currentBucket: for i in range(len(currentBucket)): if currentBucket[i][0] == key: return currentBucket[i][1] return None def keys(self): keysArray = [] for i in range(len(self.data)): if self.data[i]: keysArray.append(self.data[i][0][0]) return keysArray # First recurring character def firstRecurringCharacter(vals): items = {} for i in range(len(vals)): if not items[vals[i]]: items[i] = vals[i] else: return vals[i] return None # Implement a linked list class Node: def __init__(self, value): self.value = value self.next = None class LinkedList: def __init__(self, value): self.head = Node(value) self.tail = self.head self.length = 1 def append(self, value): node = Node(value) self.tail.next = self.node self.tail = node self.length += 1 return self.head def prepend(self, value): node = Node(value) node.next = self.head self.head = node self.length += 1 return self.head def printList(self): array = [] currentNode = self.head while currentNode: array.append(currentNode.value) currentNode = currentNode.next return array def insert(index, value): if index == 0: return self.prepend(value) elif index >= self.length: return self.append(value) node = Node(value) currentNode = self.head.next prevNode = self.head count = 1 while currentNode: if index == count: prevNode.next = node node.next = currentNode self.length += 1 break prevNode = currentNode currentNode = currentNode.next count += 1 return self.printList() def remove(index): if index == 0: self.head = self.head.next self.head.prev = None self.length -= 1 return self.printList() currentNode = self.head.next prevNode = self.head count = 1 while currentNode: if index == count: prevNode.next = currentNode.next self.length -= 1 break prevNode = currentNode currentNode = currentNode.next count += 1 return self.printList() def reverse(self): currentNode = self.head prevNode = None self.tail = self.head while currentNode: temp = currentNode currentNode = currentNode.next temp.next = prevNode prevNode = temp self.head = temp return self.printList() class Node: def __init__(self, value): self.value = value self.prev = None self.next = None class DoublyLinkedList: def __init__(self, value): self.head = Node(value) self.tail = self.head self.length = 1 def append(self, value): node = Node(value) self.tail.next = node node.prev = self.tail self.tail = node self.length += 1 return self.head def prepend(self, value): node = Node(value) node.next = self.head node.prev = None self.head = node self.length += 1 return self.head def printList(self): array = [] currentNode = self.head while currentNode: array.append(currentNode.value) currentNode = currentNode.next return array def insert(index, value): if index == 0: return self.prepend(value) elif index >= self.length: return self.append(value) node = Node(value) currentNode = self.head.next prevNode = self.head count = 1 while currentNode: if index == count: prevNode.next = node node.prev = prevNode node.next = currentNode currentNode.prev = node self.length += 1 break prevNode = currentNode currentNode = currentNode.next count += 1 return self.printList() def remove(index): if index == 0: self.head = self.head.next self.length -= 1 return self.printList() currentNode = self.head.next prevNode = self.head count = 1 while currentNode: if index == count: prevNode.next = currentNode.next currentNode.next.prev = prevNode self.length -= 1 return self.printList() prevNode = currentNode currentNode = currentNode.next count += 1 return self.printList()
Editor Settings
Theme
Key bindings
Full width
Lines