Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

‎Data-Structure/Heap/sumBetweenK1nK2.js

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)

AltStyle によって変換されたページ (->オリジナル) /