LeetCode in Kotlin

398. Random Pick Index

Medium

Given an integer array nums with possible duplicates, randomly output the index of a given target number. You can assume that the given target number must exist in the array.

Implement the Solution class:

Example 1:

Input

["Solution", "pick", "pick", "pick"] 
[[[1, 2, 3, 3, 3]], [3], [1], [3]]

Output: [null, 4, 0, 2]

Explanation:

Solution solution = new Solution([1, 2, 3, 3, 3]); 
solution.pick(3); // It should return either index 2, 3, or 4 randomly. Each index should have equal probability of returning. 
solution.pick(1); // It should return 0. Since in the array only nums[0] is equal to 1. 
solution.pick(3); // It should return either index 2, 3, or 4 randomly. Each index should have equal probability of returning.

Constraints:

Solution

import kotlin.random.Random

@Suppress("kotlin:S2245")
class Solution(nums: IntArray) {
    // O(n) time | O(n) space
    private val map: MutableMap<Int, MutableList<Int>>

    init {
        map = HashMap()
        for (i in nums.indices) {
            map.computeIfAbsent(
                nums[i],
            ) { ArrayList() }.add(i)
        }
    }

    fun pick(target: Int): Int {
        val list: List<Int> = map[target]!!
        return list[Random.nextInt(list.size)]
    }
}

/*
 * Your Solution object will be instantiated and called as such:
 * var obj = Solution(nums)
 * var param_1 = obj.pick(target)
 */
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