• 398. 随机数索引


     

    labuladong 题解思路
    难度中等

    给你一个可能含有 重复元素 的整数数组 nums ,请你随机输出给定的目标数字 target 的索引。你可以假设给定的数字一定存在于数组中。

    实现 Solution 类:

    • Solution(int[] nums) 用数组 nums 初始化对象。
    • int pick(int target) 从 nums 中选出一个满足 nums[i] == target 的随机索引 i 。如果存在多个有效的索引,则每个索引的返回概率应当相等。
    class Solution {
    public:
        unordered_map<int, vector<int>> index_map;
        Solution(vector<int>& nums) {
            for(int i = 0; i < nums.size();i++) {
                index_map[nums[i]].emplace_back(i);
            }
    
        }
        int pick(int target) {
            vector<int> index_list = index_map[target];
            return index_list[rand() % index_list.size()];
    
        }
    };
    
    /**
     * Your Solution object will be instantiated and called as such:
     * Solution* obj = new Solution(nums);
     * int param_1 = obj->pick(target);
     */

    蓄水池会超时

    class Solution {
        vector<int> &nums;
    public:
        Solution(vector<int> &nums) : nums(nums) {}
    
        int pick(int target) {
            int ans;
            int cnt = 0;
            for (int i = 0;i < nums.size(); ++i) {
                if (nums[i] == target) {
                    ++cnt; // 第 cnt 次遇到 target
                    if (rand() % cnt == 0) {
                        ans = i;
                    }
                }
            }
            return ans;
        }
    };
  • 相关阅读:
    IOS开发之UIview
    poj2823(单调队列)
    poj3250(单调栈)
    poj2796(单调栈+树状数组)
    hdu5033(单调栈)
    hdu1506(单调栈)
    2018 Multi-University Training Contest 2
    hdu4417(主席树)
    2018 Multi-University Training Contest 1
    poj2104(主席树)
  • 原文地址:https://www.cnblogs.com/zle1992/p/16622658.html
Copyright © 2020-2023  润新知