解题思路:
题目对空间复杂度有要求。在构造函数中,应该要先把nums数组拷贝一下。
在pick函数中,必然要遍历数组nums,这样才能得到 target 值对应的所有索引,之后再生成一个随机数,返回任一索引。
class Solution {
public:
vector<int> nn;
Solution(vector<int>& nums) {
nn.assign(nums.begin(), nums.end());
}
int pick(int target) {
vector<int> tmp; //用于记录target 对应的所有索引
for(int i = 0; i < nn.size(); i++){
if(nn[i] == target) tmp.push_back(i);
}
int n = rand() % tmp.size(); //生成0到tmp.size()-1 之间的一个随机数
return tmp[n];
}
};
/**
* Your Solution object will be instantiated and called as such:
* Solution* obj = new Solution(nums);
* int param_1 = obj->pick(target);
*/