我得到一个int array[8]
随机不重复的值从0到9.它没有排序。
我想将数组的索引存储在另一个以最高值开头的数组中。
例如输入数组 - {9,8,7,3,6,5,2,4}
输出数组 - {0,1,2,4,5,7,3,6}
新数组的0索引以值等于第一个数组中最高值的索引(降序)开始。
我是新来的,这是我的第一篇文章,我还在学习,所以请原谅。
我不想对第一个数组进行排序。 (不要问我为什么:O)
谢谢
答案 0 :(得分:2)
信息TreeMap constructor和TreeMap values,另请参阅Comparator
// treemap is sorted by the keys. Supplementary, you can use your own
// comparator for a custom order
TreeMap<Integer, Integer> valuesToIndexes=
new TreeMap<>(new Comparator<Integer>() {
public int compare(Integer a, Integer b) {
return b-a; // in the inverse order
}
})
;
for(int i=0; i<arr.length; i++) {
valuesToIndexes.put(arr[i], i);
}
// iterating the values of a map will be done in the order of the map's keys
// Since the key is the array value in reverse (and the value is the index)
// we'll be outputting the array indexes in the decreasing order of its values
for(Integer v : valuesToIndexes.values()) {
System.out.println(v);
}
答案 1 :(得分:0)
//input array
Integer array[] = {9, 8, 7, 4, 5, 6, 1, 2};
// originalOrder
List<Integer> originalOrder = new ArrayList<>(Arrays.asList(array));
//array to sort
List<Integer> arrayAsList = Arrays.asList(array);
Collections.sort(arrayAsList, new Comparator<Integer>() {
@Override
public int compare(Integer t, Integer t1) {
return t1.compareTo(t);
}
});
Integer outputArray[] = new Integer[array.length];
for (int i = 0; i < arrayAsList.size(); i++) {
Integer integer = arrayAsList.get(i);
int index = originalOrder.indexOf(integer);
outputArray[i] = index;
}
// test
for (Integer integer : outputArray) {
System.out.println(integer);
}