解决题型
从 `nums` 中选出一个满足 `nums[i] == target` 的随机索引 `i` 。如果存在多个有效的索引,则每个索引的返回概率应当相等。
解题思路
从不确定数量的nums数组中,随机选择某个元素。
随机 的含义是:每个元素被选中的概率相同
在数量 N : 1 -> len(nums) 遍历过程中,每个数据被选中的概率相同。
所以在 N 的每一次变化中,需要明确定义是否要覆盖前一次选中的元素。
① 通过随机计算概率 < 1 /N
② 通过随机计算 数 == 0 或者 N 等(一个值)
代码实现
def getRandom(head):
i = 1
choiceNode = None
while head:
rand = random.random()
if rand < (1 / i):
choiceNode = head.val
head = head.next
i += 1
or
def getRandom(head):
i = 1
choiceNode = None
while head:
rand = random.randint(1, i)
if rand == 0:
choiceNode = head.val
head = head.next
i += 1