← All solutions
November 6Medium

Count zero request servers

  • Array
  • Hash Table
  • Sliding Window
  • Sorting

Problem

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

class Solution:
    def countServers(self, n: int, logs: List[List[int]], x: int, queries: List[int]) -> List[int]:
        order = { queries[i]: i for i in range(len(queries))}
        queries.sort()
        logs.sort(key = lambda x: x[1])
        l, r = 0, 0
        servers = {}
        ans = [None] * len(queries)

        for q in queries:
            while r < len(logs) and logs[r][1] <= q:
                servers[logs[r][0]] = servers.get(logs[r][0], 0) + 1
                r += 1

            while l < len(logs) and logs[l][1] < q - x:
                servers[logs[l][0]] -= 1
                if not servers[logs[l][0]]:
                    del servers[logs[l][0]]
                l += 1

            ans[order[q]] = n - len(servers)

        return ans