Skip to main content

2349.js

/** ------------------------------------------------------------------------------
*
* 2349. Design a Number Container System
* Topics: Hash Table, Design, Heap (Priority Queue)
* https://leetcode.com/problems/design-a-number-container-system/description/?envType=daily-question&envId=2025-02-08
*
------------------------------------------------------------------------------ */
var NumberContainers = function () {
this.indexes = new Map()
this.numberIndexes = new Map()
}

/**
* @param {number} index
* @param {number} number
* @return {void}
*/
NumberContainers.prototype.change = function (index, number) {
this.indexes.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.indexes.get(queue.front()) !== number) {
queue.dequeue()
}

return queue.size() ? queue.front() : -1
}

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