382 鍊錶隨機節點

2021-10-02 20:45:57 字數 1143 閱讀 2058

原理參考:蓄水池抽樣——《程式設計珠璣》讀書筆記

思路:以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...