【发布时间】:2015-06-07 01:15:58
【问题描述】:
一千万个元素被输入到一个数组中(没有内存限制)。众所周知,在输入元素时,我们可以在输入值时通过检查来更新输入值的最大值。
但是想象一下,如果最大值的位置在 900 万左右
如果我删除位置 8 到 1000 万的 200 万个元素 不做任何比较,我们应该有下一个最大值。 这是否意味着在输入数据时,我们应该计划以某种方式组织数据以从剩余数据中获取最大值?
删除和插入将继续发生,但我们应该在更短的时间内以更少的步骤更新新的/剩余的最大值。 (使用多个堆栈可能会有所帮助。)
【问题讨论】:
-
请不要在 Stack Overflow 上使用当地俚语(“lac”)。
-
@Jongware:美国人什么时候会停止在 Stack Overflow 上使用当地俚语?像十亿这样的东西——10^9 还是 10^12?或者像 ºF 和英寸、英尺和英里这样的奇怪单位,而不是国际标准单位?但是,如果他们没有拼错当地术语,那将会有所帮助。
-
@JonathanLeffler:我完全不知道 lac 是什么,只有 mile 和 inch的模糊概念>。如果一个问题涉及“十亿项”并且实际价值是相关的,我会问。如果你不同意,那么我会在我的下一个答案中加入一些荷兰术语。
-
您可以在 Wikipedia 上找到“crore”和“lakh”。我没有找到作为数字单位的“lac”的定义。而且,不幸的是,英国人放弃了他们对“十亿”的合理定义为 10^12(一百万的指数的两倍,10^6)和“万亿”为 10^18(一百万的指数的三倍)。偏爱语言不太健全的美国版本。所以,这对我来说不是一个特别好的论点。 OTOH,很少有地方使用“英制”单位(英寸、华氏度),而美国是主要的反对者(英国在道路上仍然使用英里,但其他地方是公制)。
-
我不相信,@Naveen,你可以轻松地做你想做的事。您当然需要一种数据结构,该结构旨在处理此类块删除,同时保留有关“接近最大值”值的信息。副手,我不确定你是否需要树或堆结构,或其他东西。您需要根据插入值的记录的大小和索引号来索引。通过重新读取数据或重新处理已经读取的数据来重新建立最大值可能会更快。但是我并没有去寻找这样的数据结构。
标签: c