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

交友网站建设要多少钱百度代运营公司

交友网站建设要多少钱,百度代运营公司,可以在网上接网站做的网址,电商网站平台有哪些功能解决“区间内查询数字的频率”问题 问题描述 我们需要设计一个数据结构 RangeFreqQuery,它能有效地查询给定子数组内一个特定值的频率。具体来说,要求实现一个 query 方法,用于返回子数组 arr[left...right] 中某个给定值出现的次数。 输入…

解决“区间内查询数字的频率”问题

问题描述

我们需要设计一个数据结构 RangeFreqQuery,它能有效地查询给定子数组内一个特定值的频率。具体来说,要求实现一个 query 方法,用于返回子数组 arr[left...right] 中某个给定值出现的次数。

输入描述

  1. RangeFreqQuery(int[] arr):构造函数,接受一个整数数组 arr
  2. query(int left, int right, int value):查询方法,返回子数组 arr[left...right]value 出现的频率。

输出描述

对于每次 query 操作,返回一个整数,表示指定区间内特定值的出现次数。

解题思路

1. 使用哈希表记录元素位置

首先,我们可以使用一个哈希表 pos 来存储数组中每个元素的所有位置。对于数组中的每个元素,我们遍历一遍数组,将它们的位置记录在 pos 中。这样,我们能够快速查询一个元素在整个数组中的所有索引。

2. 使用二分查找提高查询效率

当我们需要查询某个值在区间 [left, right] 内出现的次数时,直接遍历区间的时间复杂度会很高。为了提高查询效率,我们可以利用二分查找算法:

  • 使用 bisect_left 查找 value 第一次出现的位置(即第一个大于等于 left 的位置)。
  • 使用 bisect_right 查找 value 最后一次出现的位置(即第一个大于 right 的位置)。

通过这两个二分查找操作,我们可以快速得出该值在区间内的频率,时间复杂度为 O(log n)

3. 总体时间复杂度

  • 初始化:遍历一次数组并记录元素的位置,时间复杂度为 O(n)
  • 查询:每次查询都进行两次二分查找,时间复杂度为 O(log n)

因此,整个数据结构的操作非常高效,能够满足大规模数据的查询需求。

代码实现

from collections import defaultdict
from bisect import bisect_left, bisect_right
from typing import Listclass RangeFreqQuery:def __init__(self, arr: List[int]):# 创建一个哈希表,存储每个元素的位置pos = defaultdict(list)for i, x in enumerate(arr):pos[x].append(i)self.pos = posdef query(self, left: int, right: int, value: int) -> int:# 获取指定值的所有位置列表a = self.pos[value]# 使用二分查找查找区间内的出现次数return bisect_right(a, right) - bisect_left(a, left)

代码解析

  1. 构造函数 __init__

    • 我们通过遍历数组 arr,将每个值的位置存储在哈希表 pos 中,pos[x] 存储的是值 x 在数组中的所有出现位置。
  2. 查询函数 query

    • 对于给定的查询区间 [left, right] 和查询值 value,首先获取该值在数组中的所有位置 a
    • 使用 bisect_left(a, left) 查找位置 left 对应的最小索引(即第一个不小于 left 的位置)。
    • 使用 bisect_right(a, right) 查找位置 right 对应的最大索引(即第一个大于 right 的位置)。
    • 通过 bisect_right(a, right) - bisect_left(a, left) 计算出 value 在区间 [left, right] 中的出现次数。

示例

示例 1

# 创建 RangeFreqQuery 实例
rangeFreqQuery = RangeFreqQuery([12, 33, 4, 56, 22, 2, 34, 33, 22, 12, 34, 56])# 查询 4 在子数组 [1, 2] 中的出现次数
print(rangeFreqQuery.query(1, 2, 4))  # 输出: 1# 查询 33 在子数组 [0, 11] 中的出现次数
print(rangeFreqQuery.query(0, 11, 33))  # 输出: 2

解释

  • 第一个查询:4 在子数组 [33, 4] 中出现了 1 次。
  • 第二个查询:33 在整个数组 [12, 33, 4, 56, 22, 2, 34, 33, 22, 12, 34, 56] 中出现了 2 次。

时间复杂度分析

  • 初始化时,构造哈希表的时间复杂度是 O(n),其中 n 是数组的长度。
  • 每次查询的时间复杂度是 O(log n),因为我们使用了二分查找来确定区间的边界。

因此,该方案非常高效,适合大规模数据的查询。

总结

通过使用哈希表和二分查找,我们能够在高效地查询给定值在指定区间的频率。在数组初始化时,先记录每个元素的索引,查询时利用二分查找快速定位元素在指定区间的位置,从而实现高效的查询。

http://www.cadmedia.cn/news/1072.html

相关文章:

  • 一建 建设网站首页seo诊断站长
  • 大悟网站设计免费产品推广软件
  • 望京网站建设公司营销活动推广方案
  • 口碑好的福州网站建设网站建设关键词排名
  • 开发一个网站需要的技术百度应用宝
  • 网络绿化网站建设哪家专业百度店铺免费入驻
  • 公司做网站要注意什么淘宝推广运营
  • 网站设计与建设公司百度服务中心
  • 装修公司网站该怎么做站长工具seo综合查询分析
  • 手机网站建设咨询网络推广外包联系方式
  • seo关键词怎么优化seo网络推广哪家专业
  • 北京网络营销的培训课程淄博seo
  • 深圳做棋牌网站建设哪家服务好百度上做推广怎么收费
  • 郑州建设企业网站找哪个公司关键词优化和seo
  • 怎样申请注册公司网站整合营销活动策划方案
  • 潭州教育网站开发株洲网站设计外包首选
  • 网站站点建设端口号的作用域名推荐
  • 软件工程师发展前景优化营商环境的措施建议
  • 京东商城网官网 网上购物平台优化网站标题
  • 昆明网站建设首选互维baidu百度一下
  • 简洁型网页优化系统
  • 怎么理解搜索引擎优化优化师和运营区别
  • 苏州免费模板建站论坛推广的步骤
  • 株洲网站建设网站买卖友链
  • 广州网站建设流程图百度爱采购竞价
  • 苏州展示型网站建设免费入驻的卖货平台
  • 5网站建设公司自己可以创建网站吗
  • 北京网站建设公司报价怎么开通百度推广账号
  • 最棒的网站建设论坛推广软件
  • 政府行业网站建设方案关键词在线优化