Skip to content

Commit 3dc7b02

Browse files
committed
find k largest elements and kth largest element
1 parent 2d7d2c7 commit 3dc7b02

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
'use strict';
2+
function heapify(arr, rootIndex, n) {
3+
let smallestIndex = rootIndex;
4+
let leftIndex = (rootIndex * 2) + 1;
5+
let rightIndex = (rootIndex * 2) + 2;
6+
if (leftIndex < n && arr[smallestIndex] > arr[leftIndex]) smallestIndex = leftIndex;
7+
if (rightIndex < n && arr[smallestIndex] > arr[rightIndex]) smallestIndex = rightIndex;
8+
if (smallestIndex != rootIndex) {
9+
let temp = arr[rootIndex];
10+
arr[rootIndex] = arr[smallestIndex];
11+
arr[smallestIndex] = temp;
12+
heapify(arr, smallestIndex, n);
13+
}
14+
}
15+
16+
function kLargestElements(array, k) {
17+
// Build Min Heap of size K
18+
for (let index = parseInt(k / 2) - 1; index >= 0; index--)
19+
heapify(array, index, k);
20+
21+
for (let index = k; index < array.length; index++) {
22+
if (array[0] < array[index]) {
23+
array[0] = array[index];
24+
heapify(array, 0, k);
25+
}
26+
}
27+
}
28+
29+
let array = [3, 5, 1, 8, 2, 4, 10, 12, 0, 7, 13, 16];
30+
let k = 3;
31+
kLargestElements(array, k);
32+
let kLargestElemetsStr = '';
33+
for (let index = 0; index < k; index++) {
34+
if (index == (k - 1))
35+
kLargestElemetsStr = kLargestElemetsStr + array[index];
36+
else
37+
kLargestElemetsStr = kLargestElemetsStr + array[index] + ', ';
38+
}
39+
console.log(k, ' largest elements are - ', kLargestElemetsStr);
40+
console.log(k + 'th largest element is - ', array[0]);

0 commit comments

Comments
 (0)