按权重随机选择
题目
思路
记录各元素前缀和和权重总和,现随机,再二分。
代码
class Solution {
public:
vector<int>* pre;
Solution(vector<int>& w) {
pre=new vector<int>(w.size());
int sum=0;
for(int i=0;i<w.size();i++)
{
sum+=w[i];
(*pre)[i]=sum;
}
}
int pickIndex() {
int suiji=rand()%pre->back();
int l=0,r=pre->size()-1;
while(l<r)
{
int mid=l+(r-l)/2;
if((*pre)[mid]<=suiji) l=mid+1;
else r=mid;
}
return l;
}
};
/**
* Your Solution object will be instantiated and called as such:
* Solution* obj = new Solution(w);
* int param_1 = obj->pickIndex();
*/