Java 访谈:一段时间内列表中的前N个整数

Java 访谈:一段时间内列表中的前N个整数,java,algorithm,data-structures,Java,Algorithm,Data Structures,最近,我被问到一个采访问题,在一段时间内,在列表中查找顶级N(10,20)整数。列表是在一段定期间隔(如5秒)内动态添加的元素。你能告诉我如何使用正确的数据结构和算法来解决这个问题吗?这些问题通常不是很复杂 最后20个条目中最高的10个:最多包含20个元素的ArrayList,在末尾添加可能会删除开头的一个元素。然后将它们添加到一个新的SortedSet(如TreeSet),并以相反的顺序取前10个。见@iced 如果能排个队就好了。(不完全如此)但最重要的一点是正确性。看你不能对ArrayLi

最近,我被问到一个采访问题,在一段时间内,在
列表中查找顶级
N(10,20)
整数。
列表
是在一段定期间隔(如5秒)内动态添加的元素。你能告诉我如何使用正确的数据结构和算法来解决这个问题吗?

这些问题通常不是很复杂

最后20个条目中最高的10个:最多包含20个元素的ArrayList,在末尾添加可能会删除开头的一个元素。然后将它们添加到一个新的SortedSet(如TreeSet),并以相反的顺序取前10个。见@iced


如果能排个队就好了。(不完全如此)但最重要的一点是正确性。看你不能对ArrayList排序。当许多重复项出现时,可能会出现不到10个排名靠前的数字。添加并发保护等的要点。

您可以使用Java优先级队列/Max堆。

前N(10,20)个整数是什么意思?列表中的前10到20个整数?你试过什么吗?或者你在面试中完全失败了,下次需要我们成功吗?制作一个排序列表,存储前N个点,并在它们到达时加上时间戳。当新点到达时-如果需要(如果过期),您将清除过期的点。将新点添加到适当的位置,并从中删除最低点。@iced:这是一个相当昂贵的数据结构。插入到排序列表中是O(N),删除也是O(N)。想解释一下你会如何改进吗?没有更好的方法,只有保持当前结果并根据新数据进行调整。这是更多的评论,然后再回答。一旦你有足够的钱,你将能够;相反,请根据需要提供答案