假设有n个数,要保证每一个被抽到的概率为1/n,可以采用
算法结论:到第i个数的时候,以1/i的概率保留,1-1/i保留原来的数。
具体做法 leetcode382
class Solution {
public:
ListNode* q;
Solution(ListNode* head) {
q=head;
}
int getRandom() {
ListNode* p=q;
int i=1,ans=0;
while(p)//循环条件
{
if(rand()%i==0)//1/i的概率
ans=p->val; //选取当前值
p=p->next; //往下判断
i++;
}
return ans;
}
};