二分法+前缀和法

 

就记录一下,二分法的用法以及前缀和的用法。

这个题的概率问题,依靠前缀和法把w的每个元素的 概率问题依靠向前求和

 然后使用二分法,找出random生成元素的所在位置下标即可。

class Solution {
    int[] w;
    public Solution(int[] w) {
        for(int i = 1; i < w.length ; i++){
            w[i] += w[i-1];
        }
        this.w = w;
    }
    
    public int pickIndex() {
        int target = new Random().nextInt(w[w.length-1])+1;
        int left = 0;
        int right = this.w.length-1;
        while(left < right){
            int mid = (left+right)/2;
            if(this.w[mid] < target){
                left = mid+1;
            }else{
                right = mid;
            }
        }
        return right;
    }
}

 

posted @ 2021-09-04 16:37  K峰  Views(114)  Comments(0)    收藏  举报