【发布时间】:2014-11-06 09:49:13
【问题描述】:
这个问题伴随着这个one 出现,它认为双数组的排序最快。
现在我想获取未排序数组对应的 top-k 索引。
我已经实现了这个版本,它(不幸地)使用自动装箱和HashMap,正如一些答案中所建议的那样,包括这个one:
HashMap<Double, Integer> map = new HashMap<Double, Integer>();
for(int i = 0; i < numClusters; i++) {
map.put(scores[i], i);
}
Arrays.sort(scores);
HashSet<Integer> topPossibleClusters = new HashSet<Integer>();
for(int i = 0; i < numClusters; i++) {
topPossibleClusters.add(map.get(scores[numClusters - (i+1)]));
}
如您所见,这使用了 HashMap,其键是原始数组的 Double 值,值是原始数组的索引。
因此,在对原始数组进行排序后,我只需从 map 中检索它。
我也使用HashSet,因为我有兴趣使用.contains() 方法确定int 是否包含在此集合中。 (我不知道这是否会有所不同,因为正如我在另一个问题中提到的那样,我的数组很小-50 个元素-)。如果这没有区别,请指出。
我对价值本身不感兴趣,只对指数感兴趣。
我的问题是是否有更快的方法可以使用它?
【问题讨论】:
-
我会使用
TreeMap更明显 - 这样您就可以简单地获得HeadMap。但更中肯的一点是,Map中的键是唯一的!如果你有重复的值,你的结果最终会有点奇怪。 -
我不认为我有重复,所以这不会是一个问题。我猜
TreeMap会隐式进行排序。我会考虑你的提议。
标签: java arrays sorting indices