LC710- 黑名单中的随机数
2022-06-26 09:49:08
#
algorithm
「link」
朴素解法:
把\([0, n-1]\)集合中删除在黑名单\(blackList\)中的数字,得到剩余的白名单\(whiteList\),每次\(pick\)就从白名单中取\(whiteList[x]\),\(x\)为数组长度下的某个随机数。
但是这题的\(n\)的范围给到了\(1e9\),在大数据范围下会\(TLE\)。
考虑到可以把\(n\)分为两个部分,前\(n-blackLen\)的部分记为白名单,后\(blackLen\)的部分记为黑名单。

于是再将前半部分的黑名单映射到后半部分的白名单即可。

因为根据推理可以得出若\([0, N - s)\)内的元素,若有\(i\)个黑名单中,那么必有\([N-s, N)\)中有\(i\)个元素为白名单。
1 | class Solution { |