class Solution:
def __init__(self, w):
self.prefixSums = []
runningTotal = 0
for weight in w:
runningTotal += weight
self.prefixSums.append(runningTotal)
self.totalWeight = runningTotal
def pickIndex(self):
target = random.randint(1, self.totalWeight)
left = 0
right = len(self.prefixSums) - 1
while left < right:
mid = (left + right) // 2
if self.prefixSums[mid] < target:
left = mid + 1
else:
right = mid
return left
init time and space. per pick.