1class Solution {23private int[] prefixSum;4private Random random;56public Solution(int[] w) {7for (int i = 1; i < w.length; i++) w[i] += w[i - 1];8prefixSum = w;9random = new Random();10}1112public int pickIndex() {13int num =14115+ random.nextInt(16prefixSum[17prefixSum.length18- 1]); // Generate random number between 1 and total sum of weights19int left = 0;20int right = prefixSum.length - 1;2122while (left < right) {23int mid = (left + right) / 2;24if (num == prefixSum[mid]) return mid;25else if (num < prefixSum[mid]) right = mid;26else left = mid + 1;27}28return left;29}30}