#1604
Medium Algorithms Alert using same key card three or more times in a one hour period
Array Hash Table String Sorting
46.1% acceptance
Feb 25, 2026
338
440
LeetCode company workers use key-cards to unlock office doors. Each time a worker uses their key-card, the security system saves the worker's name and the time when it was used. The system emits an alert if any worker uses the key-card three or more times in a one-hour period.
You are given a list of strings keyName and keyTime where [keyName[i], keyTime[i]] corresponds to a person's name and the time when their key-card was used in a single day.
Access times are given in the 24-hour time format "HH:MM", such as "23:51" and "09:49".
Return a list of unique worker names who received an alert for frequent keycard use. Sort the names in ascending order alphabetically.
Notice that "10:00" - "11:00" is considered to be within a one-hour period, while "22:51" - "23:52" is not considered to be within a one-hour period.
Solution
Rust
Time O(n²)
Space O(n)
use std::collections::HashMap;
impl Solution {
pub fn alert_names(key_name: Vec<String>, key_time: Vec<String>) -> Vec<String> {
let mut map: HashMap<String, Vec<i32>> = HashMap::new();
for (name, time) in key_name.iter().zip(key_time.iter()) {
let parts: Vec<&str> = time.split(':').collect();
let minutes = parts[0].parse::<i32>().unwrap() * 60 + parts[1].parse::<i32>().unwrap();
map.entry(name.clone()).or_default().push(minutes);
}
let mut result: Vec<String> = Vec::new();
for (name, mut times) in map {
times.sort();
for i in 2..times.len() {
if times[i] - times[i - 2] <= 60 {
result.push(name.clone());
break;
}
}
}
result.sort();
result
}
}