Debounce Simulation

Medium Real-World Scenarios
Given event timestamps and a debounce wait, output the times at which the debounced callback actually fires (only the last event of each burst survives) — the logic behind search-as-you-type.

Sample input

events = [0,100,150,400,450], wait = 200

Sample output

350 650

Solution

events = [0, 100, 150, 400, 450]
wait = 200
fires = []
for i in range(len(events)):
    is_last = i == len(events) - 1
    if is_last or events[i + 1] - events[i] > wait:
        fires.append(events[i] + wait)
print(*fires)
const events = [0, 100, 150, 400, 450];
const wait = 200;
const fires = [];
for (let i = 0; i < events.length; i++) {
  const isLast = i === events.length - 1;
  if (isLast || events[i + 1] - events[i] > wait) {
    fires.push(events[i] + wait);
  }
}
console.log(fires.join(" "));
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        int[] events = {0, 100, 150, 400, 450};
        int wait = 200;
        List<Integer> fires = new ArrayList<>();
        for (int i = 0; i < events.length; i++) {
            boolean isLast = i == events.length - 1;
            if (isLast || events[i + 1] - events[i] > wait) {
                fires.add(events[i] + wait);
            }
        }
        System.out.println(fires.stream().map(String::valueOf).collect(Collectors.joining(" ")));
    }
}
fun main() {
    val events = intArrayOf(0, 100, 150, 400, 450)
    val wait = 200
    val fires = mutableListOf<Int>()
    for (i in events.indices) {
        val isLast = i == events.size - 1
        if (isLast || events[i + 1] - events[i] > wait) {
            fires.add(events[i] + wait)
        }
    }
    println(fires.joinToString(" "))
}
let events = [0, 100, 150, 400, 450]
let wait = 200
var fires = [Int]()
for i in 0..<events.count {
    let isLast = i == events.count - 1
    if isLast || events[i + 1] - events[i] > wait {
        fires.append(events[i] + wait)
    }
}
print(fires.map(String.init).joined(separator: " "))
void main() {
  final events = [0, 100, 150, 400, 450];
  const wait = 200;
  final fires = <int>[];
  for (var i = 0; i < events.length; i++) {
    final isLast = i == events.length - 1;
    if (isLast || events[i + 1] - events[i] > wait) {
      fires.add(events[i] + wait);
    }
  }
  print(fires.join(' '));
}
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> events = {0, 100, 150, 400, 450};
    int wait = 200;
    bool first = true;
    for (int i = 0; i < (int) events.size(); i++) {
        bool isLast = i == (int) events.size() - 1;
        if (isLast || events[i + 1] - events[i] > wait) {
            if (!first) cout << " ";
            cout << (events[i] + wait);
            first = false;
        }
    }
    cout << endl;
    return 0;
}
#include <stdio.h>

int main() {
    int events[] = {0, 100, 150, 400, 450};
    int n = 5, wait = 200, first = 1;
    for (int i = 0; i < n; i++) {
        int isLast = i == n - 1;
        if (isLast || events[i + 1] - events[i] > wait) {
            if (!first) printf(" ");
            printf("%d", events[i] + wait);
            first = 0;
        }
    }
    printf("\n");
    return 0;
}