美文网首页
398. 随机数索引(Python)

398. 随机数索引(Python)

作者: 玖月晴 | 来源:发表于2020-09-16 15:56 被阅读0次

题目

难度:★★☆☆☆
类型:数组
方法:数学

力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录

给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。

注意:
数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。

示例:

int[] nums = new int[] {1,2,3,3,3};
Solution solution = new Solution(nums);

// pick(3) 应该返回索引 2,3 或者 4。每个索引的返回概率应该相等。
solution.pick(3);

// pick(1) 应该返回 0。因为只有nums[0]等于1。
solution.pick(1);

解答

这是一个随机采样问题。我们在初始化时构造一个字典,用来统计所有数字出现的下标。字典的键是数字,值是该数字所在的位置,由于数字可能有重复,所以数字出现的位置可能有很多,因此用列表的形式给出。

在调用时,选取该数字出现的位置列表,然后进行随机采样即可。

import random


class Solution:

    def __init__(self, nums):
        self.num_dict = dict()
        for index, num in enumerate(nums):
            if num not in self.num_dict.keys():
                self.num_dict.update({num: [index]})
            else:
                self.num_dict[num].append(index)

    def pick(self, target: int) -> int:
        index_list = self.num_dict[target]
        selected_index = int(random.random() * len(index_list))
        return index_list[selected_index]

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

相关文章

网友评论

      本文标题:398. 随机数索引(Python)

      本文链接:https://www.haomeiwen.com/subject/zzxqyktx.html