一篇涉及了很多知识的题解

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说明:

  1. mt19937头文件是 是伪随机数产生器,用于产生高性能的随机数
  2. uniform_int_distribution 头文件在中,是一个随机数分布类,参数为生成随机数的类型,构造函数接受两个值表示区间段
  3. accumulate 头文件在中,求特定范围内所有元素的和。
  4. spartial_sum函数的头文件在,对(first, last)内的元素逐个求累计和,放在result容器内
  5. back_inserter函数头文件,用于在末尾插入元素。
  6. lower_bound头文件在,用于找出范围内不大于num的第一个元素
posted @ 2021-09-07 10:45  fashow  阅读(28)  评论(0编辑  收藏  举报