382 鍊錶隨機節點

2021-09-24 14:29:31 字數 1307 閱讀 8706

382. 鍊錶隨機節點

給定乙個單鏈表,隨機選擇鍊錶的乙個節點,並返回相應的節點值。保證每個節點被選的概率一樣。

高階:如果鍊錶十分大且長度未知,如何解決這個問題?你能否使用常數級空間複雜度實現?

示例:// 初始化乙個單鏈表 [1,2,3].

listnode head = new listnode(1);

head.next = new listnode(2);

head.next.next = new listnode(3);

solution solution = new solution(head);

// getrandom()方法應隨機返回1,2,3中的乙個,保證每個元素被返回的概率相等。

solution.getrandom();

分析:還是單樣本的蓄水池

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

listnode*head=

null

;/** returns a random node's value. */

intgetrandom()

tmp=tmp-

>next;

}return ret;}}

;

同樣不明白為什麼go版本提交的結果是執行錯誤而不是解答錯誤!

/**

* definition for singly-linked list.

* type listnode struct

*/type solution struct

/** @param head the linked list's head.

note that the head is guaranteed to be not null, so it contains at least one node. */

func

constructor

(head *listnode) solution

}/** returns a random node's value. */

func

(this *solution)

getrandom()

int tmp=tmp.next

}return ret

}

返回執行出錯解雇:

line ?: ?

而不是正常的執行錯誤

382 鍊錶隨機節點

原理參考 蓄水池抽樣 程式設計珠璣 讀書筆記 思路 以1 m的概率選擇第m個物件 思路 高階 如果鍊錶十分大且長度未知,如何解決這個問題?你能否使用常數級空間複雜度實現?class solution def init self,head listnode self.head head defgetr...

382 鍊錶隨機節點 水池抽樣

給你乙個單鏈表,隨機選擇鍊錶的乙個節點,並返回相應的節點值。每個節點 被選中的概率一樣 實現 solution 類 solution listnode head 使用整數陣列初始化物件。int getrandom 從鍊錶中隨機選擇乙個節點並返回該節點的值。鍊錶中所有節點被選中的概率相等。defini...

複製含有隨機節點的鍊錶

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 由於是深copy,隨機節點指向的物件也應該是新的節點。給出兩種解法 第一種,採用hashm...