Drill

ProblemsJavaScript › monitoring

The p95 of a batch of latencies

mediummonitoringJavaScript

Dashboards quote p95 rather than the average, so one pathological request does not hide behind a thousand fast ones.

percentileValue(values: list<int>, rank: int) → int

Solve it in the editor →

Where you start

function percentileValue(values, rank) {
  
}

Worked examples

CallResult
percentileValue([1,2,3,4,5], 50)3
percentileValue([1,2,3,4,5], 100)5
percentileValue([1,2,3,4,5], 1)1
percentileValue([10,20,30,40,50,60,70,80,90,100], 95)100

Hint

In integers, ceil(rank * n / 100) is (rank * n + 99) / 100. Then subtract one for a zero-based index.

Reference solution in JavaScript
function percentileValue(values, rank) {
  if (values.length === 0 || rank < 1 || rank > 100) return 0;
  const s = values.slice().sort((a, b) => a - b);
  const pos = Math.floor((rank * s.length + 99) / 100);
  return s[pos - 1];
}

The same problem in another language

More monitoring problems in JavaScript