...
代码块 |
---|
vector<int> getRandom(ListNode *node, int m) {
vector<int> pool(m);
int i = 0;
while(i < m && node != nullptr) {
pool[i] = node->val;
node = node->next;
i++;
}
while(node != nullptr) {
int d = rand() % (i+1); // 随机获得一个[0,i]内的整数
if(d < m) { // 如果整数落在[0,m-1]范围内,则替换蓄水池中的元素
pool[d] = node->val;
}
node = node->next;
i++;
}
return pool;
} |
蓄水池抽样示例: