【发布时间】:2014-04-21 09:34:31
【问题描述】:
给定一个大的未排序数组,我需要找出给定数字在特定范围内的出现次数。 (可以有很多查询)
例如如果 arr[]={ 6,7,8,3,4,1,2,4,6,7,8,9} 和 left_range=3 和 right_range=7 和 number=4,则输出将为 2。(考虑 0 索引数组)
arr[i] 可以在 1 到 100000 的范围内。数组最多可以有 100000 个数字。
您能指导我在这里应该使用哪种数据结构或算法吗?
PS:允许对数组进行预处理。
【问题讨论】:
-
如果您只进行一次性查询,可能只是简单地获取一个数组切片并暴力破解它将成为最有效的未排序数组。
-
啊,如果同一个输入数组可以有很多查询,考虑把数组变成一个结构,可以在O(log n)时间内查询一个数字,然后扩展该结构,然后让您将计数缩小一个范围。换句话说,您在每个数字节点的记录将是包含该数字的索引。
-
@Sudipta - 我创建了一个二维矩阵。对于每个数字 1
-
@aruisdante - 你是在建议像段树这样的东西吗?还是应该为所有数字创建一个邻接列表并仅存储它们出现的索引?
-
@NiklasB。您可能想使用
map,以便您可以使用数字存储索引记录,但我试图不完全为他们解决他们的作业。
标签: arrays algorithm data-structures segment-tree