Problems › TypeScript › monitoring
The longest silence between heartbeats
A service sends a heartbeat every so often. The longest gap between two of them is how long it might have been down without anyone noticing.
- Timestamps arrive in any order and are in seconds.
- The answer is the largest difference between two heartbeats that are next to each other in time.
- Fewer than two heartbeats means no gap at all: return 0.
longestGap(timestamps: list<int>) → int
Where you start
function longestGap(timestamps: number[]): number {
}
Worked examples
| Call | Result |
|---|---|
longestGap([100,130,200,205]) | 70 |
longestGap([205,100,200,130]) | 70 |
longestGap([10,20]) | 10 |
longestGap([42]) | 0 |
Hint
Sort first. Without that, "next to each other" means nothing.
Reference solution in TypeScript
function longestGap(timestamps: number[]): number {
if (timestamps.length < 2) return 0;
const s = timestamps.slice().sort((a, b) => a - b);
let worst = 0;
for (let i = 1; i < s.length; i++) worst = Math.max(worst, s[i] - s[i - 1]);
return worst;
}