1
/**
2
* @param {number[]} count
3
* @return {number[]}
4
*/
5
var sampleStats = function (count) {
6
let min;
7
let max;
8
let sum = 0;
9
let mode = 0;
10
let prefix = 0;
11
let prefixSum = new Map();
12
for (let i = 0; i < count.length; i++) {
13
if (count[i] === 0) continue;
14
if (min === undefined) min = i;
15
max = i;
16
if (count[i] > count[mode]) mode = i;
17
sum += count[i] * i;
18
prefix += count[i];
19
prefixSum.set(prefix, i);
20
}
21
const mean = sum / prefix;
22
// min, max, mean, mode found
23
// finding median using prefixSum map
24
let median;
25
let medianLeft;
26
let medianRight;
27
const medianPoint = Math.ceil(prefix / 2);
28
for (let i = medianPoint; i <= prefix; i++) {
29
if (!prefixSum.has(i)) continue;
30
if (medianLeft !== undefined) {
31
medianRight = prefixSum.get(i);
32
median = (medianLeft + medianRight) / 2;
33
break;
34
}
35
if (i === medianPoint && prefix % 2 === 0) {
36
medianLeft = prefixSum.get(i);
37
continue;
38
}
39
median = prefixSum.get(i);
40
break;
41
}
42

43
return [min, max, mean, median, mode];
44
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0