Problem · Hash Table

Get Minimum Time for DNS Resolution

Learn this problem
EasyWalleye Capital logoWalleye CapitalFULLTIMEOA

Problem statement

A Domain Name System (DNS) translates domain names to IP addresses which are then used by browsers to load internet resources. For quicker DNS lookups, browsers store a number of recent DNS queries in a DNS cache. Retrieving data from the cache is often faster than retrieving it from a DNS server. This task aims to simulate DNS resolution and determine the time taken to process different URLs.

Assume that each DNS cache can store a maximum of the cache_size most recent DNS requests, i.e., URL-IP mappings. The cache is initially empty. It takes cache_time units of time to fetch data from the DNS cache, and server_time units of time to fetch data from the DNS server.

Given a list of URLs visited as an array of strings, urls, determine the minimum time taken to resolve each DNS request.

Note: New DNS requests are dynamically added to the cache, and the cache stores mappings according to the order in which the requests were made.

Function

getMinTime(cache_size: int, cache_time: int, server_time: int, urls: String[]) → int[]

Complete the function getMinTime in the editor.

getMinTime has the following parameters(s):

  1. int cache_size: the size of the DNS cache
  2. int cache_time: the time taken to fetch data from the cache
  3. int server_time: the time taken to resolve an address using the DNS server
  4. String urls[n]: the URLs visited by a user

Returns

int[n]: the minimum time to resolve each DNS request

Examples

Example 1

cache_size = 2cache_time = 3server_time = 5urls = ["www.google.com", "www.yahoo.com", "www.yahoo.com", "www.google.com", "www.yahoo.com", "www.yahoo.com", "www.coursera.com", "www.coursera.com"]return = [3, 3, 2, 2, 3, 3, 5, 5]

The DNS resolution process for each URL is as follows:

  • www.google.com: Cache is empty, so it takes 5 units of time. Cache becomes ["www.google.com"].
  • www.yahoo.com: Not in cache, so it takes 5 units of time. Cache becomes ["www.google.com", "www.yahoo.com"].
  • www.yahoo.com: Already in cache, so it takes 3 units of time. Cache remains unchanged.
  • www.google.com: Already in cache, so it takes 3 units of time. Cache remains unchanged.
  • www.yahoo.com: Already in cache, so it takes 3 units of time. Cache remains unchanged.
  • www.yahoo.com: Already in cache, so it takes 3 units of time. Cache remains unchanged.
  • www.coursera.com: Not in cache, so it takes 5 units of time. Cache becomes ["www.yahoo.com", "www.coursera.com"].
  • www.coursera.com: Already in cache, so it takes 5 units of time. Cache becomes ["www.coursera.com", "www.yahoo.com"].

Constraints

  • 1 ≤ n ≤ 10^5
  • 1 ≤ cache_size ≤ 10^5
  • 1 ≤ cache_time, server_time ≤ 10^9
  • 1 ≤ size of urls[i] ≤ 20
drafts saved locally
public int[] getMinTime(int cache_size, int cache_time, int server_time, String[] urls) {
  // write your code here
}
cache_size2
cache_time3
server_time5
urls["www.google.com", "www.yahoo.com", "www.yahoo.com", "www.google.com", "www.yahoo.com", "www.yahoo.com", "www.coursera.com", "www.coursera.com"]
expected[3, 3, 2, 2, 3, 3, 5, 5]
checking account