1. 解析
题目大意,返回在数组中指定元素的索引,若查找元素出现多次,要保证返回的每个索引的概率相等
2. 分析
这道题可以说按照正常的解法是很简单的,但存在一个问题,若所查找的元素在数组中出现无限多次,就不是很好处理啦。实际上,本题考查的是水塘采样,维持一个大小的水塘即可。建议去了解一下水塘采样,这样这题就很容易理解啦~~~
class Solution {
public:
Solution(vector<int>& nums) {
this->nums = nums;
}
int pick(int target) {
int cnt = 0;
int res = -1;
for (int i = 0; i < nums.size(); ++i){
if (nums[i] != target) continue;
cnt++;
if (rand() % cnt == 0) res = i; //维持一个大小为1的水塘即可,因为只要求1个随机数
}
return res;
}
private:
vector<int> nums;
};