python leetcode 382. Linked List Random Node
阿新 • • 發佈:2018-11-30
不知道長度 蓄水池抽樣原理? 假設三個節點1,2,3,4
第一次迴圈 res=1
第二次迴圈 res有1/2的概率=2 另外1/2=1
第三次迴圈 res有1/3的概率=3 另外2/3的概率等於其他值 根據第二迴圈可得 1/2*(2/3)=1/3的概率等於2
1/2*(2/3)=1/3的概率等於1
第四次迴圈 res有1/4的概率=4 另外3/4的概率等於其他值 根據第三迴圈可得 1/3*(3/4)=1/4的概率等於3
1/3*(3/4)=1/4的概率等於2 1/3*(3/4)=1/4的概率等於1
一次類推
class Solution: import random def __init__(self, head): """ @param head The linked list's head. Note that the head is guaranteed to be not null, so it contains at least one node. :type head: ListNode """ self.head=head def getRandom(self): """ Returns a random node's value. :rtype: int """ p=self.head if not p: return None i=0 while p: if random.randint(0,i)==0: res=p.val i+=1 p=p.next return res