#2747
Medium Algorithms Count zero request servers
Array Hash Table Sliding Window Sorting
35.6% acceptance
Feb 25, 2026
401
57
You are given an integer n denoting the total number of servers and a 2D 0-indexed integer array logs, where logs[i] = [server_id, time] denotes that the server with id server_id received a request at time time.
You are also given an integer x and a 0-indexed integer array queries.
Return a 0-indexed integer array arr of length queries.length where arr[i] represents the number of servers that did not receive any requests during the time interval [queries[i] - x, queries[i]].
Note that the time intervals are inclusive.
Solution
Rust
Time O(n²)
Space O(n)
impl Solution {
pub fn count_servers(n: i32, mut logs: Vec<Vec<i32>>, x: i32, queries: Vec<i32>) -> Vec<i32> {
use std::collections::HashMap;
logs.sort_unstable_by_key(|l| l[1]);
let mut q_idx: Vec<usize> = (0..queries.len()).collect();
q_idx.sort_unstable_by_key(|&i| queries[i]);
let mut ans = vec![0i32; queries.len()];
let mut freq: HashMap<i32, i32> = HashMap::new();
let mut left = 0usize;
let mut right = 0usize;
for qi in q_idx {
let q = queries[qi];
let lo = q - x;
while right < logs.len() && logs[right][1] <= q {
*freq.entry(logs[right][0]).or_insert(0) += 1;
right += 1;
}
while left < right && logs[left][1] < lo {
let e = freq.get_mut(&logs[left][0]).unwrap();
*e -= 1;
if *e == 0 { freq.remove(&logs[left][0]); }
left += 1;
}
ans[qi] = n - freq.len() as i32;
}
ans
}
}