1. 问题 给定一个黑名单,包含[0, N)的一些数,从[0, N)之间的非黑名单数中随机采样一个值. 2. 思路 字典映射 (1)计算黑名单数的长度,记作B,因为已经排除掉了B个元素,所以最后是从N-B个数中采样. (2)可以维护一个字典,表示从[0, N-B)到[0, N)之间的映射. (3)这样就可以每次采样从[0, N-B)之间取,采样后将值映射回[0, N). (4)然而这么做爆内存了(MemoryError),因为N的最大长度为10亿,B的最大长度为10万,N-B特别大. 时间复杂度…