diff --git a/MinHeap.java b/MinHeap.java new file mode 100644 index 00000000..05e59385 --- /dev/null +++ b/MinHeap.java @@ -0,0 +1,95 @@ +class MinHeap +{ + + private int[] Heap; + private int size; + private int maxsize; + + private static final int FRONT = 1; + + public MinHeap(int maxsize) + { + + this.maxsize = maxsize; + this.size = 0; + + Heap = new int[this.maxsize + 1]; + Heap[0] = Integer.MIN_VALUE; + } + + private int parent(int pos) + { + return pos / 2; + } + + private int leftChild(int pos) + { + return (2 * pos); + } + + private int rightChild(int pos) + { + return (2 * pos) + 1; + } + + private boolean isLeaf(int pos) + { + + if (pos > (size / 2)) { + return true; + } + + return false; + } + + private void swap(int fpos, int spos) + { + + int tmp; + tmp = Heap[fpos]; + + Heap[fpos] = Heap[spos]; + Heap[spos] = tmp; + } + + private void minHeapify(int pos) + { + if (!isLeaf(pos)) { + int swapPos = pos; + if (rightChild(pos) <= size) + swapPos = Heap[leftChild(pos)] < Heap[rightChild(pos)] ? leftChild(pos) : rightChild(pos); + else + swapPos = leftChild(pos); + + if (Heap[pos] > Heap[leftChild(pos)] || Heap[pos] > Heap[rightChild(pos)]) { + swap(pos, swapPos); + minHeapify(swapPos); + } + + } + } + + public void insert(int element) { + + if (size >= maxsize) { + return; + } + + Heap[++size] = element; + int current = size; + + while (Heap[current] < Heap[parent(current)]) { + swap(current, parent(current)); + current = parent(current); + } + } + + public int remove() { + + int popped = Heap[FRONT]; + Heap[FRONT] = Heap[size--]; + minHeapify(FRONT); + + return popped; + } +} \ No newline at end of file diff --git a/MissingNumberInSortedArray.java b/MissingNumberInSortedArray.java new file mode 100644 index 00000000..a0505aa5 --- /dev/null +++ b/MissingNumberInSortedArray.java @@ -0,0 +1,31 @@ +//Time Complexity: O(logn) +//Space Complexity: O(1) +class Solution { + public int missingElement(int[] nums, int k) + { + int left = 0; + int right = nums.length - 1; + int numberOfMissing = 0; + + while(left <= right) + { + int mid = left + (right - left) / 2; + numberOfMissing = nums[mid] - nums[0] - mid; + + if(k > numberOfMissing) + { + left = mid + 1; + } + else + { + right = mid - 1; + } + } + + if (numberOfMissing >= k) + { + return nums[left] - 1 - (numberOfMissing - k); + } + return nums[right] + (k - numberOfMissing); + } +} \ No newline at end of file diff --git a/Problem1.cpp b/Problem1.cpp deleted file mode 100644 index 8b137891..00000000 --- a/Problem1.cpp +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Problem1.java b/Problem1.java deleted file mode 100644 index 8b137891..00000000 --- a/Problem1.java +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Problem2.cpp b/Problem2.cpp deleted file mode 100644 index 8b137891..00000000 --- a/Problem2.cpp +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Problem2.java b/Problem2.java deleted file mode 100644 index 8b137891..00000000 --- a/Problem2.java +++ /dev/null @@ -1 +0,0 @@ -