From d0bc9d50bb1f76bd131518ef6f69b5040790e8fc Mon Sep 17 00:00:00 2001 From: aakhtar3 Date: Mon, 19 Sep 2022 10:40:14 -0400 Subject: [PATCH 1/2] Revert "Delete 295-Find-Median-from-Data-Stream.js - Duplicate File" --- .../295-Find-Median-from-Data-Stream.js | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 javascript/295-Find-Median-from-Data-Stream.js diff --git a/javascript/295-Find-Median-from-Data-Stream.js b/javascript/295-Find-Median-from-Data-Stream.js new file mode 100644 index 000000000..492039ff9 --- /dev/null +++ b/javascript/295-Find-Median-from-Data-Stream.js @@ -0,0 +1,56 @@ +/** + * https://leetcode.com/problems/find-median-from-data-stream/ + * Your MedianFinder object will be instantiated and called as such: + * var obj = new MedianFinder() + * obj.addNum(num) + * var param_2 = obj.findMedian() + */ +class MedianFinder { + constructor () { + this.maxHeap = new MaxPriorityQueue() + this.minHeap = new MinPriorityQueue() + } + + /* Time O(log(N)) | Space (N) */ + insertNum (num) { + this.addNum(num) + } + + addNum (num, heap = this.getHeap(num)) { + heap.enqueue(num) + this.rebalance() + } + + getHeap (num, { maxHeap, minHeap } = this) { + const isFirst = maxHeap.isEmpty() + const isGreater = num <= this.top(maxHeap); + const isMaxHeap = (isFirst || isGreater); + return (isMaxHeap) + ? maxHeap + : minHeap + } + + rebalance ({ maxHeap, minHeap } = this) { + const canShiftMax = (minHeap.size() + 1) < maxHeap.size() + if (canShiftMax) return minHeap.enqueue(maxHeap.dequeue().element) + + const canShiftMin = maxHeap.size() < minHeap.size() + if (canShiftMin) return maxHeap.enqueue(minHeap.dequeue().element) + } + + /* Time O(1) | Space (1) */ + findMedian ({ maxHeap, minHeap } = this) { + const isEven = maxHeap.size() === minHeap.size() + return (isEven) + ? this.average(maxHeap, minHeap) + : this.top(maxHeap) + } + + average (maxHeap, minHeap) { + return (this.top(maxHeap) + this.top(minHeap)) / 2 + } + + top (heap) { + return heap.front()?.element || 0 + } +} From cc5b54db3237a5a1e750c0516548779b1b227f63 Mon Sep 17 00:00:00 2001 From: aakhtar3 Date: Mon, 19 Sep 2022 10:41:01 -0400 Subject: [PATCH 2/2] Delete 295-Find-Median-From-Data-Stream.js --- .../295-Find-Median-From-Data-Stream.js | 56 ------------------- 1 file changed, 56 deletions(-) delete mode 100644 javascript/295-Find-Median-From-Data-Stream.js diff --git a/javascript/295-Find-Median-From-Data-Stream.js b/javascript/295-Find-Median-From-Data-Stream.js deleted file mode 100644 index 295594e97..000000000 --- a/javascript/295-Find-Median-From-Data-Stream.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * https://leetcode.com/problems/find-median-from-data-stream/ - * Your MedianFinder object will be instantiated and called as such: - * var obj = new MedianFinder() - * obj.addNum(num) - * var param_2 = obj.findMedian() - */ -class MedianFinder { - constructor () { - this.maxHeap = new MaxPriorityQueue() - this.minHeap = new MinPriorityQueue() - } - - /* Time O(log(N)) | Space (N) */ - insertNum (num) { - this.addNum(num) - } - - addNum (num, heap = this.getHeap(num)) { - heap.enqueue(num) - this.rebalance() - } - - getHeap (num, { maxHeap, minHeap } = this) { - const isFirst = maxHeap.isEmpty() - const isGreater = num <= this.top(maxHeap); - const isMaxHeap = (isFirst || isGreater); - return (isMaxHeap) - ? maxHeap - : minHeap - } - - rebalance ({ maxHeap, minHeap } = this) { - const canShiftMax = (minHeap.size() + 1) < maxHeap.size() - if (canShiftMax) return minHeap.enqueue(maxHeap.dequeue().element) - - const canShiftMin = maxHeap.size() < minHeap.size() - if (canShiftMin) return maxHeap.enqueue(minHeap.dequeue().element) - } - - /* Time O(1) | Space (1) */ - findMedian ({ maxHeap, minHeap } = this) { - const isEven = maxHeap.size() === minHeap.size() - return (isEven) - ? this.average(maxHeap, minHeap) - : this.top(maxHeap) - } - - average (maxHeap, minHeap) { - return (this.top(maxHeap) + this.top(minHeap)) / 2 - } - - top (heap) { - return heap.front()?.element || 0 - } -} \ No newline at end of file