解题思路:
此题为带权重的随机选择数组。
如果给定一个数组怎么利用,每个元素来代表其权重呢?
答案是利用前缀和数组,前缀和数组的每个元素对应的就是原数组的每个元素的权重值。
假设随机生成一个target,在前缀和的两个元素之间,我们不能找到对应的前缀和值,所以就要用二分查找,寻找两个前缀和数值之间最大得元素索引。
虽然是向右查找,但是查找右边最大的元素索引,其实是向右的左侧查找。
class Solution {
private int[] preSum;
private Random rand = new Random();