Skip to main content
Back to problems
#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)
LeetCode
solution.rs
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
  }
}