java如何打印数组中10个最小值的索引
我需要从数组中选择10个最小的数字(有2000个项目)并打印它们的索引
起初,我尝试对这个数组进行排序,并打印值数组[0到9]。这是最小的数字,但我丢失了这些值的索引,它们有一个非排序数组
第二个选项是尝试使用treeMap,它工作得很好,但当我有两个相等的键时,它只打印其中一个,但我需要打印两个键
将代码与treeMap一起使用的示例:
TreeMap<Integer, String> treemap = new TreeMap<Integer, String>();
treemap.put(2, "two");
treemap.put(1, "one");
treemap.put(3, "three");
treemap.put(6, "six");
treemap.put(6, "six2");
treemap.put(5, "five");
Collection<String> coll=treemap.values();
System.out.println("Value of the collection: "+coll);
到目前为止,我还没有使用treeMap,所以有可能存在一些简单的方法来修复它。还是最好用别的东西
如果有任何帮助,我将不胜感激
# 1 楼答案
简短解决方案:
创建索引数组(循环初始化简单)
使用自定义比较函数对该索引数组进行排序,该函数比较其他数组中索引的值。注意:如果要按顺序打印索引,请使用稳定排序
迭代排序的索引数组,打印索引并计算不同的值(值更改时增加计数器),计数器变为11时停止
# 2 楼答案
您可以使用稍微修改过的快速排序来完成这项工作,同时对数组进行排序,如果您也交换索引数组,那么它就可以做到这一点
这就是我们做出改变的地方
# 3 楼答案
创建一个简单类来保存两个整数,或对任何值使用泛型:
并利用
Collections.sort
输出:
# 4 楼答案
那么为什么不创建一个类来保存这些索引呢? 然后,只需按值对数组进行排序,就可以得到关联的索引
注意:
如果要按索引对具有相同值的对象进行排序,可以修改比较器,如下所示:
输出(使用第二个
compareTo
方法):# 5 楼答案
相对于
value
对(value, index)
对进行排序,而不是对裸值进行排序。 然后,只取前10对,就有10个原点索引例如,您要排序:
制作
(value, index)
对:关于
value
的排序:指数:
你用
TreeMap
的方法很好。您必须进行的唯一修改如下所示: