假设当前正要读取第n个数据,则我们以1/n的概率留下该数据,否则留下前n-1个数据中的一个,以这种方式选择,所有数据流中数据被选择的概率一样。
具体代码
class Solution {
int[] nums;
public Solution(int[] nums) {
this.nums = nums;
}
public int pick(int target) {
Random r = new Random();
int index = 0;
int n = 0;
for(int i = 0;i < nums.length;i++){
if(nums[i] == target){
n++;
if(r.nextInt() % n == 0){
index = i;
}
}
}
return index;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(nums);
* int param_1 = obj.pick(target);
*/