LeetCode in Kotlin

380. Insert Delete GetRandom O(1)

Medium

Implement the RandomizedSet class:

You must implement the functions of the class such that each function works in average O(1) time complexity.

Example 1:

Input

["RandomizedSet", "insert", "remove", "insert", "getRandom", "remove", "insert", "getRandom"] 
[[], [1], [2], [2], [], [1], [2], []]

Output: [null, true, false, true, 2, true, false, 2]

Explanation:

RandomizedSet randomizedSet = new RandomizedSet(); 
randomizedSet.insert(1); // Inserts 1 to the set. Returns true as 1 was inserted successfully. 
randomizedSet.remove(2); // Returns false as 2 does not exist in the set. 
randomizedSet.insert(2); // Inserts 2 to the set, returns true. Set now contains [1,2]. 
randomizedSet.getRandom(); // getRandom() should return either 1 or 2 randomly. 
randomizedSet.remove(1); // Removes 1 from the set, returns true. Set now contains [2]. 
randomizedSet.insert(2); // 2 was already in the set, so return false. 
randomizedSet.getRandom(); // Since 2 is the only number in the set, getRandom() will always return 2.

Constraints:

Solution

import kotlin.random.Random

@Suppress("kotlin:S2245")
class RandomizedSet {
    private val list: MutableList<Int>
    private val map: MutableMap<Int, Int>

    /* Initialize your data structure here. */
    init {
        list = ArrayList()
        map = HashMap()
    }

    /* Inserts a value to the set. Returns true if the set did not already contain the specified element. */
    fun insert(`val`: Int): Boolean {
        if (map.containsKey(`val`)) {
            return false
        }
        map[`val`] = list.size
        list.add(`val`)
        return true
    }

    /* Removes a value from the set. Returns true if the set contained the specified element. */
    fun remove(`val`: Int): Boolean {
        if (!map.containsKey(`val`)) {
            return false
        }
        val swap1 = map[`val`]!!
        val swap2 = list.size - 1
        val val2 = list[swap2]
        map[val2] = swap1
        map.remove(`val`)
        list[swap1] = val2
        list.removeAt(list.size - 1)
        return true
    }

    /* Get a random element from the set. */
    fun getRandom(): Int {
        return list[Random.nextInt(list.size)]
    }
}

/*
 * Your RandomizedSet object will be instantiated and called as such:
 * var obj = RandomizedSet()
 * var param_1 = obj.insert(`val`)
 * var param_2 = obj.remove(`val`)
 * var param_3 = obj.getRandom()
 */
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy