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的第一个元素