一篇涉及了很多知识的题解
leetcode528 按权重随机选择
涵盖多个c++知识点的题解
class Solution {
private:
mt19937 gen;
uniform_int_distribution<int> dis;
vector<int> pre;
public:
Solution(vector<int>& w): gen(random_device{}()), dis(1, accumulate(w.begin(), w.end(), 0)) {
partial_sum(w.begin(), w.end(), back_inserter(pre));
}
int pickIndex() {
int x = dis(gen);
return lower_bound(pre.begin(), pre.end(), x) - pre.begin();
}
};
C++STL说明:
- mt19937头文件是
是伪随机数产生器,用于产生高性能的随机数 - uniform_int_distribution 头文件在
中,是一个随机数分布类,参数为生成随机数的类型,构造函数接受两个值表示区间段 - accumulate 头文件在
中,求特定范围内所有元素的和。 - spartial_sum函数的头文件在
,对(first, last)内的元素逐个求累计和,放在result容器内 - back_inserter函数头文件
,用于在末尾插入元素。 - lower_bound头文件在
,用于找出范围内不大于num的第一个元素