我有一个对象数组,这些对象在上次更新时都有时间戳标记。我想得到一个只有最近更新项目的数组的子集。我将从50到100的数组中仅检索5个元素,性能是我的首要任务,因此我可以使用其中一个类方法对整个数组进行排序。这样做的最佳方式是什么?
答案 0 :(得分:1)
我会使用insertion sort并在您选择所需数量的元素后突破。该解决方案具有O(k * n)复杂度,其中k是要提取的元素的数量。
还有算法在O(n)
中的未排序数组中找到第K个最大元素How to find the kth largest element in an unsorted array of length n in O(n)?
找到第K个最大元素X后,您可以遍历数组并选择大于X的所有元素。您可以保证具有优于X的k-1元素。
答案 1 :(得分:0)
如果您只有100个元素,那么我只需对它们进行排序。 否则,我将使用基于堆的优先级队列实现。要创建O(n),从那时起每次插入/删除都会产生与之相关的O(logn)成本。