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