leetcode 528. Random Pick with Weight

Posted ymjyqsx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 528. Random Pick with Weight相关的知识,希望对你有一定的参考价值。

给一个权重的vector,让你根据权重的概率返回值,返回的值是这些权重的索引。

比如给你一个[1,2]的权重矩阵,1/3的概率返回0,2/3的概率返回1。

等概率函数random只能等概率的一系列数,所以需要将权重矩阵进行累加,即[1,2]变成[1,3],这样如果你用random生成的等概率数是0,就属于第一个权重;如果生成的等概率数是1、2,就属于第二个等概率数。

可以看到其实就是用二分查找找第一个大于用random生成的数。

 

class Solution 
public:
    Solution(vector<int>& w) 
        sum = w;
        for(int i = 1;i < w.size();i++)
            sum[i] = sum[i-1] + w[i];
        
    
    
    int pickIndex() 
        int num = sum[sum.size() - 1];
        int index = random()%num;
        int left = 0,right = sum.size() - 1;
        while(left < right)
            int mid = left + (right - left)/2;
            if(sum[mid] <= index)
                left = mid + 1;
            else
                right = mid;
        
        return right;
    

    vector<int> sum;
;

/**
 * Your Solution object will be instantiated and called as such:
 * Solution* obj = new Solution(w);
 * int param_1 = obj->pickIndex();
 */

 https://www.cnblogs.com/grandyang/p/9784690.html

以上是关于leetcode 528. Random Pick with Weight的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 528. Random Pick with Weight / 497. Random Point in Non-overlapping Rectangles

528. Random Pick with Weight

528. Random Pick with Weight

leetcode 528 按权重随机选择

Leetcode: Random Pick Index

710. Random Pick with Blacklist - LeetCode