算法: 随机选择相同数字的索引398. Random Pick Index

这篇具有很好参考价值的文章主要介绍了算法: 随机选择相同数字的索引398. Random Pick Index。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

398. Random Pick Index

Given an integer array nums with possible duplicates, randomly output the index of a given target number. You can assume that the given target number must exist in the array.
Implement the Solution class:

  • Solution(int[] nums) Initializes the object with the array nums.
  • int pick(int target) Picks a random index i from nums where nums[i] == target. If there are multiple valid i’s, then each index should have an equal probability of returning.

Example 1:

Input
["Solution", "pick", "pick", "pick"]
[[[1, 2, 3, 3, 3]], [3], [1], [3]]
Output
[null, 4, 0, 2]

Explanation
Solution solution = new Solution([1, 2, 3, 3, 3]);
solution.pick(3); // It should return either index 2, 3, or 4 randomly. Each index should have equal probability of returning.
solution.pick(1); // It should return 0. Since in the array only nums[0] is equal to 1.
solution.pick(3); // It should return either index 2, 3, or 4 randomly. Each index should have equal probability of returning.

Constraints:

  • 1 <= nums.length <= 2 * 104
  • -231 <= nums[i] <= 231 - 1
  • target is an integer from nums.
  • At most 104 calls will be made to pick.

用defaultdict建立值对应的索引列表

from collections import defaultdict  # 导入 defaultdict 类,用于创建默认字典
from typing import List  # 导入 List 类型注释
import random  # 导入 random 模块,用于生成随机数

class Solution:

    def __init__(self, nums: List[int]):
        self.rand = random.Random()  # 创建一个 random.Random 对象,用于生成随机数
        self.indices = defaultdict(list)  # 创建一个默认字典,其默认值类型为 list
        
        # 遍历 nums 列表,并将每个元素的索引存储在字典中
        for i, num in enumerate(nums):
            self.indices[num].append(i)
        
    def pick(self, target: int) -> int:
        l = len(self.indices[target])  # 获取目标元素在 nums 中出现的次数(即索引列表的长度)
        
        # 随机选择一个索引并返回
        random_index = self.indices[target][self.rand.randint(0, l - 1)]
        return random_index

# 示例用法:
# obj = Solution(nums)
# param_1 = obj.pick(target)

复杂度分析:

  1. 时间复杂度:
    init 方法:O(N),其中 N 是 nums 列表的长度。
    pick 方法:O(1),因为我们只是从一个已知长度的列表中随机选择一个元素。

  2. 空间复杂度:
    O(N),其中 N 是 nums 列表的长度。这是因为在最坏的情况下,nums 中的每个数字都是唯一的,因此我们需要为每个数字存储一个索引。

解释defaultdict

defaultdict 是 Python 标准库 collections 中的一个类,它继承自内置的 dict 类。与普通的字典不同,defaultdict 允许你为字典中不存在的键提供一个默认值。这样,当你尝试访问一个不存在的键时,defaultdict 会自动为该键创建一个条目,并将其设置为你提供的默认值。

这个特性在很多情况下都非常有用,尤其是当你需要收集数据到列表或其他集合类型的时候。

使用示例:

from collections import defaultdict

# 使用 list 作为默认值类型
d = defaultdict(list)

# 现在,当你访问一个不存在的键时,defaultdict 会自动创建一个空列表作为该键的值
print(d["a"])  # 输出 []

# 你可以像普通字典一样添加键值对
d["a"].append(1)
d["a"].append(2)
d["b"].append(3)

print(d)  # 输出 defaultdict(<class 'list'>, {'a': [1, 2], 'b': [3]})

使用场景:
在算法和数据结构中,defaultdict 常用于以下几种场景:

  1. 分组:当你需要根据某个键(或属性)将一组对象分组时。
  2. 计数器:当你需要计算每个元素出现的次数时。
  3. 邻接列表:在图论中,用于表示图的邻接列表。

总结:
使用 defaultdict 可以让代码更简洁,减少了检查键是否存在的需要,从而提高代码的可读性和效率。文章来源地址https://www.toymoban.com/news/detail-675286.html

到了这里,关于算法: 随机选择相同数字的索引398. Random Pick Index的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】STL 算法 - 排序算法 ( 合并排序算法 - merge 函数 | 随机排序算法 - random_shuffle 函数 | 反转序列算法 - reverse 函数 )

    在 C++ 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 merge 合并排序算法函数 用于 将 两个已排序好的容器 合并成一个新的已排序的容器 ; merge 合并排序算法 函数原型 如下 : 参数解析 : InputIterator1 first1 参数 : 有序 输入 容器 1 的 迭代器范围 的 起始迭代器 (

    2024年01月18日
    浏览(38)
  • (全英语版)处理恶意软件的随机森林分类器算法(Random Forest Classifier On Malware)

    Random Forest Classifier On Malware (copyright 2020 by YI SHA, if you want to re-post this,please send me an email:shayi1983end@gmail.com) (全英语版)处理恶意软件的随机森林分类器算法(Random Forest Classifier On Malware) Overview 随机森林分类器是最近很流行的一种识别恶意软件的机器学习算法,由

    2024年02月12日
    浏览(33)
  • LeetCode //C - 528. Random Pick with Weight

    You are given a 0-indexed array of positive integers w where w[i] describes the weight of the i t h i^{th} i t h index. You need to implement the function pickIndex(), which randomly picks an index in the range [0, w.length - 1] (inclusive) and returns it. The probability of picking an index i is w[i] / sum(w). For example, if w = [1, 3], the probability of

    2024年04月22日
    浏览(18)
  • 贪心算法、贪心搜索/采样(greedy search/sampling)、集束搜索(beam search)、随机采样(random sample)

    贪心算法,又名贪婪法,是寻找 最优解问题 的常用方法,这种方法模式一般将求解过程分成 若干个步骤 ,但每个步骤都应用贪心原则,选取 当前状态下 最好/最优的选择 (局部最有利的选择),并以此希望 最后堆叠出 的结果也是最好/最优的解。{看着这个名字,贪心,贪

    2024年02月15日
    浏览(32)
  • 【Python】蒙特卡洛模拟 | PRNG 伪随机数发生器 | 马特赛特旋转算法 | LCG 线性同余算法 | Python Random 模块

          猛戳订阅!  👉 《一起玩蛇》🐍 💭 写在前面: 本篇博客将介绍经典的伪随机数生成算法,我们将  重点讲解 LCG(线性同余发生器) 算法与马特赛特旋转算法,在此基础上顺带介绍 Python 的 random 模块。   本篇博客还带有练习,无聊到喷水的练习,咳咳…… 学完前

    2024年02月04日
    浏览(38)
  • chatgpt赋能python:Python随机选择数字

    如果你正在寻找一种简单的方法在Python中选择随机数字,那么你来对地方了!在这篇文章里,我们将介绍Python的内置模块random和它的方法来选择随机数字。 Python的random模块是一个用于处理伪随机数字生成的内置模块。它可以通过使用Mersenne Twister算法来生成随机数字序列。这

    2024年02月06日
    浏览(68)
  • 系统学习Python——随机模块random:随机顺序返回序列random.shuffle

    分类目录:《系统学习Python》总目录 接受一个序列,并以随机顺序返回此序列。需要注意的是,使用这个函数不会生成新的列表,只是将原列表的次序打乱。 语法 参数 lst :待排序的 list 返回值 实例 以上实例输出结果为:

    2024年02月15日
    浏览(29)
  • Python 随机函数random详解

    介绍这7个随机数的方法应用:    说明:用于生成一个0到1的随机符点数: 0 = x 1.0  说明:用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a b,则生成的随机数n: b = n = a。如果 a b, 则 a = n = b。     说明:用于生成一个指定范围内的整数

    2024年02月05日
    浏览(50)
  • 随机森林(Random Forest)简单介绍

    随机森林是一种监督式学习算法,适用于分类和回归问题。它可以用于数据挖掘,计算机视觉,自然语言处理等领域。随机森林是在决策树的基础上构建的。随机森林的一个重要特点是它可以减少决策树由于过度拟合数据而导致的过拟合,从而提高模型的性能。 随机森林是一

    2024年02月07日
    浏览(33)
  • 【机器学习】随机森林 – Random forest

    随机森林是一种由 决策树 构成的 集成算法 ,他在很多情况下都能有不错的表现。 要深入理解上面这句话,请阅读我的另外两篇文章: 【机器学习】决策树 – Decision Tree 【机器学习】集成学习 - Ensemble Learning 随机森林属于 集成学习 中的 Bagging (Bootstrap AGgregation 的简称)

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包