当前位置: 首页 > news >正文

Leetcode2080:区间内查询数字的频率

题目描述:

请你设计一个数据结构,它能求出给定子数组内一个给定值的 频率 。

子数组中一个值的 频率 指的是这个子数组中这个值的出现次数。

请你实现 RangeFreqQuery 类:

  • RangeFreqQuery(int[] arr) 用下标从 0 开始的整数数组 arr 构造一个类的实例。
  • int query(int left, int right, int value) 返回子数组 arr[left...right] 中 value 的 频率 。

一个 子数组 指的是数组中一段连续的元素。arr[left...right] 指的是 nums 中包含下标 left 和 right 在内 的中间一段连续元素。 

 代码思路:

类初始化 __init__ 方法

  1. 输入参数:接收一个整数列表 arr
  2. 数据结构:使用 defaultdict(list) 来存储每个值在数组 arr 中出现的所有索引。defaultdict 是 Python collections 模块中的一个容器,它允许我们通过默认工厂函数(这里是 list)来自动初始化缺失的键。
  3. 填充字典:遍历数组 arr,对于每个元素 v 和其索引 i,将索引 i 添加到字典 dct 中键 v 对应的列表中。这样,dct[value] 将会是一个列表,包含所有值为 value 的元素的索引。

查询方法 query

  1. 输入参数:接收三个整数 leftright 和 value,分别表示查询的左边界、右边界和要查询的值。
  2. 查询逻辑
    • 使用 bisect.bisect_left 函数在 dct[value] 列表中查找第一个大于或等于 left 的索引的位置。这个位置之前的所有索引都不在查询区间 [left, right] 内。
    • 使用 bisect.bisect_right 函数在 dct[value] 列表中查找第一个大于 right 的索引的位置。这个位置之前的所有索引(不包括这个位置本身)都在查询区间 [left, right] 内。
    • 计算这两个位置之间的差值,即 bisect_right 返回的位置减去 bisect_left 返回的位置。这个差值就是值 value 在区间 [left, right] 内出现的次数。

代码实现:

class RangeFreqQuery:def __init__(self, arr: List[int]):self.dct = defaultdict(list)for i, v in enumerate(arr): self.dct[v].append(i)def query(self, left: int, right: int, value: int) -> int:return bisect.bisect_right(self.dct[value], right) - bisect.bisect_left(self.dct[value], left)

http://www.lryc.cn/news/539175.html

相关文章:

  • 北斗导航 | 周跳探测算法(matlab源码)
  • Nginx实战_高性能Web服务器与反向代理的配置全解
  • 基于微信小程序的电影院订票选座系统的设计与实现,SSM+Vue+毕业论文+开题报告+任务书+指导搭建视频
  • MySQL智障离谱问题,删了库确还存在、也不能再创建同名库
  • 基于单片机的多功能门铃控制系统设计(论文+源码)
  • 分享8款AI生成PPT的工具!含测评
  • ”无痕模式“真的无痕?
  • 蓝桥杯班级活动
  • PHP支付宝--转账到支付宝账户
  • 2.18寒假
  • Docker 与持续集成 / 持续部署(CI/CD)的集成(二)
  • SQL Server的安装和简单使用
  • c/c++蓝桥杯经典编程题100道(19)汉诺塔问题
  • Linux 信号量
  • Qt开发①Qt的概念+发展+优点+应用+使用
  • 向量库(Vector Database)
  • torchsparse安装过程的问题
  • 【核心算法篇七】《DeepSeek异常检测:孤立森林与AutoEncoder对比》
  • Win10环境使用零讯ZeroNews内网穿透实现Deepseek对外服务
  • CUDA 安装 一直卡在Installing Nsight Visual Studio Edition
  • Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网
  • STM32 定时器产生定周期方法
  • 解锁机器学习核心算法 | 支持向量机:机器学习中的分类利刃
  • 青少年编程与数学 02-009 Django 5 Web 编程 21课题、部署
  • ARM系统源码编译OpenCV 4.10.0(包含opencv_contrib)
  • cmake:定位Qt的ui文件
  • (leetcode 1749 前缀和)1749. 任意子数组和的绝对值的最大值
  • 下载安装运行测试开源vision-language-action(VLA)模型OpenVLA
  • 【网络安全 | 漏洞挖掘】我如何通过Cookie Manipulation发现主域上的关键PII?
  • 【操作系统】操作系统概述