Skip to content

Commit bab0dda

Browse files
committed
sum between k1th and k2th smallest elements
1 parent 08a969e commit bab0dda

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
'use strict';
2+
function minHeapify(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+
minHeapify(arr, smallestIndex, n);
13+
}
14+
}
15+
16+
function findSumBetweenK1nK2(arr, k1, k2) {
17+
// construct min heap
18+
for (let index = (arr.length / 2) - 1; index >= 0; index--)
19+
minHeapify(arr, index, arr.length)
20+
21+
for (let index = 0; index < k1; index++) {
22+
minHeapify(arr, 0, arr.length - index);
23+
let temp = arr[0];
24+
arr[0] = arr[arr.length - 1 - index];
25+
arr[arr.length - 1 - index] = temp;
26+
}
27+
let sum = 0;
28+
for (let index = k1; index < (k2 - 1); index++) {
29+
minHeapify(arr, 0, arr.length - index);
30+
sum = sum + arr[0];
31+
let temp = arr[0];
32+
arr[0] = arr[arr.length - 1 - index];
33+
arr[arr.length - 1 - index] = temp;
34+
}
35+
return sum;
36+
}
37+
// Sum of elements between k1th and k2th smallest elements
38+
let array = [20, 8, 22, 4, 12, 10, 14];
39+
let k1 = 3, k2 = 6;
40+
// k1th smallest element is 10, k2th smallest element is 20
41+
// and sum between these two elements are [12, 14] = 26
42+
console.log('sum between ' + k1 + ' and ' + k2 + ' smallest elements is = ' + findSumBetweenK1nK2(array, k1, k2))

0 commit comments

Comments
 (0)