【问题标题】:Data structure to handle numerous queries on large size array处理大型数组上的大量查询的数据结构
【发布时间】:2018-11-06 19:52:45
【问题描述】:

给定以下形式的 q 个查询。有一份清单。

1 x y:将数字 x 添加到列表中 y 次。

2 n: 查找已排序列表的第 n 个数

约束

1

1

1

样本。 输入

4

1 3 6

1 5 2

2 7

2 4

输出

5

3

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读stackoverflow.com/help/how-to-ask,尤其是meta.stackexchange.com/questions/10811/…。这里的想法不是让我们为您做功课,而是让您尝试它,向我们展示一些代码(或描述您的潜在解决方案),并让我们帮助指导您找到解决方案。
  • 在您的示例输入中,第一行的“3”是什么?
  • 我很抱歉那是“4”或没有查询.....
  • 我尝试用 map 来实现它,但是对于一些测试用例却很困难。
  • 如果您阅读了有关如何提出好问题的链接,则说明您没有遵循建议。您需要发布尝试解决问题的代码,以便我们帮助您了解哪里出了问题以及如何解决问题。

标签: data-structures


【解决方案1】:

这是一个竞争性的编程问题,我现在解决这个问题还为时过早,但我可以尝试提供一些建议。

如果您要显式存储整个数组,显然会耗尽您的内存。但是您可以利用数组的结构来存储每个条目在数组中出现的次数。所以如果你得到了查询

1 3 5

那么您将存储 (3, 5) 对,而不是存储 [3, 3, 3],表示数字 3 在列表中出现 5 次。

你可以很容易地构建它,也许作为你更新的整数对的向量。

剩下的任务是实现 2 查询,您可以在其中通过索引找到一个元素。我们选择的结构的一个副作用是您不能直接索引该整数对向量,因为该列表中的索引与假设数组中的索引不匹配。我们可以从一开始就将向量中每个条目的大小相加,直到达到我们想要的索引,但到目前为止我们处理的查询数量是 O(n^2) ......可能太慢了。相反,我们可能想要一些用于前缀和的可更新数据结构——也许如this answer 中所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2018-12-02
    • 2012-04-11
    • 1970-01-01
    • 2014-02-08
    相关资源
    最近更新 更多