| 12345678910111213141516171819202122232425262728293031323334353637 | type Solution struct {	sum []int	l   int	n   int}func Constructor(w []int) (sol Solution) {	n := len(w)	sol.sum = make([]int, n+1)	for i := range w {		sol.sum[i+1] = sol.sum[i] + w[i]	}	sol.n, sol.l = sol.sum[n], n+1	return}func (this *Solution) PickIndex() int {	idx := rand.Intn(this.n) + 1	beg, end := 1, this.l-1	for beg <= end {		mid := beg + (end - beg)		if val := this.sum[mid]; val == idx {			return mid - 1		} else if val < idx {			beg = mid + 1		} else {			end = mid - 1		}	}	return beg - 1}/** * Your Solution object will be instantiated and called as such: * obj := Constructor(w); * param_1 := obj.PickIndex(); */
 |