LeetCode in Kotlin

528. Random Pick with Weight

Medium

You are given a 0-indexed array of positive integers w where w[i] describes the weight of the ith index.

You need to implement the function pickIndex(), which randomly picks an index in the range [0, w.length - 1] (inclusive) and returns it. The probability of picking an index i is w[i] / sum(w).

Example 1:

Input [“Solution”,”pickIndex”] [[[1]],[]]

Output: [null,0]

Explanation:

Solution solution = new Solution([1]); 
solution.pickIndex(); // return 0. The only option is to return 0 since there is only one element in w.

Example 2:

Input

["Solution","pickIndex","pickIndex","pickIndex","pickIndex","pickIndex"]
[[[1,3]],[],[],[],[],[]]

Output: [null,1,1,1,1,0]

Explanation:

Solution solution = new Solution([1, 3]); 
solution.pickIndex(); // return 1. It is returning the second element (index = 1) that has a probability of 3/4. 
solution.pickIndex(); // return 1 
solution.pickIndex(); // return 1 
solution.pickIndex(); // return 1 
solution.pickIndex(); // return 0. It is returning the first element (index = 0) that has a probability of 1/4. 

Since this is a randomization problem, multiple answers are allowed. 
All of the following outputs can be considered correct: 
[null,1,1,1,1,0] 
[null,1,1,1,1,1] 
[null,1,1,1,0,0] 
[null,1,1,1,0,1] 
[null,1,0,1,0,0] 
...... 
and so on.

Constraints:

Solution

import java.util.Random
import java.util.TreeMap

@Suppress("kotlin:S2245")
class Solution(val w: IntArray) {

    var x: IntArray = IntArray(w.size) { 0 }
    val rand = Random()
    val tree = TreeMap<Int, Int>()
    var sum = 0

    init {
        for (i in w.indices) {
            tree.put(sum, i)
            sum += w[i]
        }
    }

    fun pickIndex(): Int {
        val r = rand.nextInt(sum)
        return tree.floorEntry(r).value!!
    }
}

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