528. Random Pick with Weight
按权重随机选择
You are given a 0-indexed array of positive integers w
where w[i]
describes the weight of the i
th
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)
.
For example, if
w = [1, 3]
, the probability of picking index0
is1 / (1 + 3) = 0.25
(i.e.,25%
), and the probability of picking index1
is3 / (1 + 3) = 0.75
(i.e.,75%
).
Example 1:
Example 2:
Constraints:
1 <= w.length <= 10
4
1 <= w[i] <= 10
5
pickIndex
will be called at most10
4
times.
分析:
通过前缀和数组 + 二分查找实现按权重随机选择,确保每个下标被选中的概率与其权重成正比。前缀和数组将权重映射为连续区间,每个下标 i
对应区间 [prefix_sum[i-1] + 1, prefix_sum[i]]
。
Last updated
Was this helpful?