LeetCode每日一题——398. 随机数索引

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

题目

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


注意:

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

示例

示例:

int[] nums = new int[] {1,2,3,3,3};
Solution solution = new Solution(nums);
// pick(3) 应该返回索引 2,3 或者 4。
每个索引的返回概率应该相等。
// pick(1) 应该返回 0。因为只有nums[0]等于1。

思路

典型的工序题,遍历给定数组使用哈希表记录相同值出现的下标,最后返回时使用随机函数将给定值作为键返回哈希表的值即可

题解

# 398. 随机数索引
class Solution1:
    def __init__(self, nums):
        self.h = {}
        for i in range(len(nums)):
            if nums[i] in self.h:
                self.h[nums[i]].append(i)
            else:
                self.h[nums[i]] = [i]
    def pick(self, target: int) -> int:
        if target in self.h:
            return random.choice(self.h[target])
目录
相关文章
|
25天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
29天前
|
算法 数据挖掘 开发者
LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】
LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】
|
2月前
|
索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
|
9月前
|
人工智能 BI 索引
【Leetcode -598.范围求和Ⅱ -599.两个列表的最小索引总和】
【Leetcode -598.范围求和Ⅱ -599.两个列表的最小索引总和】
29 0
|
11月前
|
索引
LeetCode-398 随机数索引
LeetCode-398 随机数索引
|
2月前
|
开发者 索引 Python
【python刷题】LeetCode 2057E 值相等的最小索引(5种简单高效的解法)
【python刷题】LeetCode 2057E 值相等的最小索引(5种简单高效的解法)
35 0
|
索引
LeetCode每日一题(9)——随机数索引(理解水塘抽样)
随机数索引 1.题目 2.示例 3.思路及代码
107 0
LeetCode每日一题(9)——随机数索引(理解水塘抽样)
|
索引 Python
LeetCode 599. 两个列表的最小索引总和
假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
79 0
|
存储 索引
LeetCode——398. 随机数索引
LeetCode——398. 随机数索引
77 0
|
24天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题