| 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();
 
-  */
 
 
  |