Back to all solutions

#2349 - Design a Number Container System

Problem Description

Design a number container system that can do the following:

  • Insert or Replace a number at the given index in the system.
  • Return the smallest index for the given number in the system.

Implement the NumberContainers class:

  • NumberContainers() Initializes the number container system.
  • void change(int index, int number) Fills the container at index with the number. If there is already a number at that index, replace it.
  • int find(int number) Returns the smallest index for the given number, or -1 if there is no index that is filled by number in the system.

Solution

var NumberContainers = function() {
  this.indexMap = new Map();
  this.lookup = new Map();
};

/**
 * @param {number} index
 * @param {number} number
 * @return {void}
 */
NumberContainers.prototype.change = function(index, number) {
  this.indexMap.set(index, number);
  this.getQueue(number).enqueue(index);
};

/**
 * @param {number} number
 * @return {number}
 */
NumberContainers.prototype.find = function(number) {
  const queue = this.getQueue(number);
  while (queue.size() && this.indexMap.get(queue.front()) !== number) {
    queue.dequeue();
  }
  return queue.size() ? queue.front() : -1;
};

NumberContainers.prototype.getQueue = function(number) {
  if (!this.lookup.has(number)) {
    this.lookup.set(number, new PriorityQueue({ compare: (a, b) => a - b }));
  }
  return this.lookup.get(number);
};