diff --git a/Problem1.py b/Problem1.py new file mode 100644 index 00000000..7209dcd3 --- /dev/null +++ b/Problem1.py @@ -0,0 +1,21 @@ +# Find missing number in an array + +# Input : arr[] = [1, 2, 3, 5, 6, 7, 8] +# Input : arr[] = [1, 2, 4, 5, 6, 7, 8, 9] + + +def searchMissingElement(li): + low = 0 + high = len(li) - 1 + while low <= high: + mid = (low + high) // 2 + if li[mid] == (mid + 1): + # missing element in right side of array + low = mid + 1 + else: + high = mid - 1 + return low + 1 + + +li = [1, 2, 3, 5, 6, 7, 8] +print(searchMissingElement(li)) diff --git a/Problem2.py b/Problem2.py new file mode 100644 index 00000000..ee67d477 --- /dev/null +++ b/Problem2.py @@ -0,0 +1,79 @@ +class MyMinHeap: + def __init__(self, capacity): + self.maxSize = capacity + self.size = 0 + self.heap = [0] * capacity + + def parent(self, i): + return (i - 1) // 2 + + def leftChild(self, i): + return 2 * i + 1 + + def rightChild(self, i): + return 2 * i + 2 + + def isLeaf(self, i): + return i >= self.size // 2 and i < self.size + + def swap(self, i, j): + self.heap[i], self.heap[j] = self.heap[j], self.heap[i] + + def heapify(self, i): + if self.isLeaf(i): + return + + left = self.leftChild(i) + right = self.rightChild(i) + smallest = i + + if left < self.size and self.heap[left] < self.heap[smallest]: + smallest = left + if right < self.size and self.heap[right] < self.heap[smallest]: + smallest = right + + if smallest != i: + self.swap(i, smallest) + self.heapify(smallest) + + def insert(self, val): + if self.size >= self.maxSize: + return + + self.heap[self.size] = val + current = self.size + self.size += 1 + + while current > 0 and self.heap[current] < self.heap[self.parent(current)]: + self.swap(current, self.parent(current)) + current = self.parent(current) + + def removeMin(self): + if self.size == 0: + return -1 + + min_val = self.heap[0] + self.heap[0] = self.heap[self.size - 1] + self.size -= 1 + self.heapify(0) + return min_val + + def printHeap(self): + for i in range((self.size - 2) // 2 + 1): + print(f"PARENT: {self.heap[i]}", end="") + if self.leftChild(i) < self.size: + print(f" LEFT: {self.heap[self.leftChild(i)]}", end="") + if self.rightChild(i) < self.size: + print(f" RIGHT: {self.heap[self.rightChild(i)]}", end="") + print() + + +# Main driver +if __name__ == "__main__": + heap = MyMinHeap(15) + for val in [5, 3, 17, 10, 84, 19, 6, 22, 9]: + heap.insert(val) + + print("Min Heap:") + heap.printHeap() + print("Removed Min:", heap.removeMin())