LeetCode第 398 题:随机数索引(C++)

398. 随机数索引 - 力扣(LeetCode)

与这一题类似:LeetCode第 382 题:链表随机节点(C++)_zj-CSDN博客,蓄水池抽样问题。

这一题里面应该是不太可能保存一个输入数组的拷贝作为成员变量的,所以可以使用指针保存相应的地址。

class Solution {
public:
    Solution(vector& nums){a = &nums;}//引用的初始化只能在初始值列表里
    
    int pick(int target) {
        int cnt = 1;
        int res = 0;
        for(int i = 0; i < a->size(); ++i){
            if((*a)[i] == target){
                if(rand() % cnt == 0) res = i;
                ++cnt;
            }
        }
        return res;
    }
private:
    vector* a;//定义一个指针保存数组地址,避免拷贝
};

/**
 * Your Solution object will be instantiated and called as such:
 * Solution* obj = new Solution(nums);
 * int param_1 = obj->pick(target);
 */

你可能感兴趣的:(leetcode,leetcode,蓄水池抽样)