2
* @param {string[]} keyName3
* @param {string[]} keyTime6
var alertNames = function (keyName, keyTime) {7
// so we don't keep duplicates8
const abusers = new Set();9
// map: name->times[] (sorted)11
for (let i = 0; i < keyName.length; i++) {12
const name = keyName[i];13
const time = keyTime[i];14
if (times[name] == null) times[name] = [];15
times[name].push(time);17
if (times[name].length > 2) {19
const len = times[name].length;20
// we check all triples for a time difference below 1 hour.21
// as times are sorted, we need to check all i and i+222
for (let i = 0; i < len - 2; i++) {23
if (belowHour(times[name][i], times[name][i + 2])) {29
const ar = Array.from(abusers);30
// sort them lexicographically36
hour diff is above 1: false37
hour diff is 1: m2 must be <= m139
function belowHour(t1, t2) {40
const [h1, m1] = t1.split(":").map((num) => parseInt(num));41
const [h2, m2] = t2.split(":").map((num) => parseInt(num));42
if (h1 === h2) return true;43
if (h2 - h1 > 1) return false;44
if (m2 <= m1) return true;