思路:
前缀和刚好能表示每一段的大小(多了0这个端点)
所以可以随机生成一个数,看落在哪一段前缀和上(找大于等于随机数的左端点)
注意随机数的区间是[1,sum].比如给定的数组是[3,5,7,1]
三对应的权重是[1,2,3],所以不能包含0
import random
class Solution(object):
def __init__(self, w):
"""
:type w: List[int]
"""
self.pre = [0]
for i in w:
self.pre.append(self.pre[-1]+i)
def pickIndex(self):
"""
:rtype: int
"""
rand = random.randint(1,self.pre[-1])
res = bisect_left(self.pre,rand)-1
return res