RandomPool等概率随机快速获取key
文章目录 等概率随机快速获取key的结构 RandomPool结构 算法思路 相应代码 等概率随机快速获取key的结构 RandomPool结构 完成以下三个功能: insert(key):将某个key加入到该结构,做到不重复加入; delete(key):将原本在结构中的某个key移除; getRandom(): 等概率随机返回结构中的任何一个key。 【要求】 insert 、 delete 和 getRandom 方法的时间复杂度都是 O ( 1 ) O(1) O ( 1 ) 。 算法思路 HashSet 结构 insert 、 delete 操作时间复杂度为 O ( 1 ) O(1) O ( 1 ) ,而现需要等概率随机返回key; random 等概率生成数值,而 HashSet 按 key 索引而不是数值索引,因此想到使用 HashMap 引入数值; 所以用两个 HashMap : key_num_map 和 num_key_map key_num_map 维护 key 值 num_key_map 通过随机生成的数值获取 key 要点 : count 保存 key数量 对应的 num 值随着 count 增加(唯一); key_num_map 和 num_key_map 在移除 给定的key 时需要 调整对应的num和count ; num为给定key对应的值