class Solution:
def __init__(self, w: List[int]):
self.accumulate_list = [w[0]]
for i in range(1, len(w)):
self.accumulate_list.append(self.accumulate_list[-1] + w[i])
def pickIndex(self) -> int:
# 注意rand从1开始选,但下面的l作为index仍然从0开始
rand = random.randint(1, self.accumulate_list[-1])
l = 0
r = len(self.accumulate_list)
while l < r:
mid = l + (r - l) // 2
if self.accumulate_list[mid] < rand:
l = mid + 1
else: # 第一个比rand大的index,等于时也shrink右边界
r = mid
return l