class Solution {
int[] array;
double[] probs;
double[] prefixes;
public Solution(int[] w) {
array = w;
int sum = 0;
for (int num : w) {
sum += num;
}
double prob = 0;
probs = new double[w.length];
prefixes = new double[w.length];
for (int i = 0; i < w.length; i++) {
probs[i] = (double)w[i] / sum;
prob += probs[i];
prefixes[i] = prob;
}
}
public int pickIndex() {
Random random = new Random();
double val = random.nextDouble();
int lo = 0;
int hi = array.length - 1;
while (lo < hi) {
int mid = lo + (hi - lo) / 2;
if (prefixes[mid] < val) {
lo = mid + 1;
} else {
hi = mid;
}
}
return lo;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(w);
* int param_1 = obj.pickIndex();
*/