在一次技术面试中得到了这个问题。
我知道使用(在java中)HashSet解决这个问题的方法。
但当面试官强行说出“”这个词时,我无法理解一个非常大的数组,假设给定数组中有 1000 万个元素".
我需要改变方法吗?如果不是,实现这一目标的效率应该是多少?
PS:算法或实现与语言无关。
谢谢。
有一些关键的事情,面试官希望你回答这样的问题:如果你无法将数组加载到内存中,那么how much I can load
。解决问题的步骤如下:
- 您需要根据可用内存量来划分数组。
- 假设您一次可以加载 1M 个数字。您已将数据拆分为
k parts
。您加载前 1M 并构建Min Heap
它的。然后取下顶部并应用HeapifyMin Heap
.
- 对数据的其他部分重复相同的操作。
- 现在你将有 K 个已排序的分割。
- 现在从每个 K 分割中获取第一个数字,并再次构建一个
Min Heap
.
- 现在将顶部从
Min Heap
并将值存储在temporary variable
以及与下一个即将到来的数字进行比较以查找重复项。
- 现在,从上次删除编号的同一分割(部分)中获取下一个编号。把这个数字放在上面
Min Heap
并应用Heapify。
- 现在最上面的
Min Heap
是你的下一个排序数字并将其与temporary variable for finding the duplicates. Update the
如果数字不重复,则为临时变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)