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...