原理參考:蓄水池抽樣——《程式設計珠璣》讀書筆記
思路:以1/m的概率選擇第m個物件
思路:
高階:如果鍊錶十分大且長度未知,如何解決這個問題?你能否使用常數級空間複雜度實現?
class
solution
:def
__init__
(self, head: listnode)
: self.head = head
defgetrandom
(self)
->
int:
import random
ans,cur,count = self.head.val,self.head.
next,1
while cur:
count+=
1if random.randrange(
0,count)==0
:#這個成立的概率是1/count
382 鍊錶隨機節點
382.鍊錶隨機節點 給定乙個單鏈表,隨機選擇鍊錶的乙個節點,並返回相應的節點值。保證每個節點被選的概率一樣。高階 如果鍊錶十分大且長度未知,如何解決這個問題?你能否使用常數級空間複雜度實現?示例 初始化乙個單鏈表 1,2,3 listnode head new listnode 1 head.ne...
382 鍊錶隨機節點 水池抽樣
給你乙個單鏈表,隨機選擇鍊錶的乙個節點,並返回相應的節點值。每個節點 被選中的概率一樣 實現 solution 類 solution listnode head 使用整數陣列初始化物件。int getrandom 從鍊錶中隨機選擇乙個節點並返回該節點的值。鍊錶中所有節點被選中的概率相等。defini...
複製含有隨機節點的鍊錶
輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 由於是深copy,隨機節點指向的物件也應該是新的節點。給出兩種解法 第一種,採用hashm...