528. 按权重随机选择
难度中等143收藏分享切换为英文接收动态反馈
给定一个正整数数组 w
,其中 w[i]
代表下标 i
的权重(下标从 0
开始),请写一个函数 pickIndex
,它可以随机地获取下标 i
,选取下标 i
的概率与 w[i]
成正比。
例如,对于 w = [1, 3]
,挑选下标 0
的概率为 1 / (1 + 3) = 0.25
(即,25%),而选取下标 1
的概率为 3 / (1 + 3) = 0.75
(即,75%)。
也就是说,选取下标 i
的概率为 w[i] / sum(w)
。
示例 1:
1 | 输入: |
示例 2:
1 | 输入: |
提示:
1 <= w.length <= 10000
1 <= w[i] <= 10^5
pickIndex
将被调用不超过10000
次
通过次数19,031
提交次数39,362
二分查找
利用了数字是正数,他们的和是单调递增的特性,来判断一个值落在哪里。
1 | class Solution { |