首页 > 解决方案 > 如何在不改变 Java 中的顺序的情况下找到一组整数的顺序?

问题描述

我试图找出一组未定义数量的整数的顺序。

例如它可能是 {30,60,10,100,20,50,110} 但我不想对它们进行排序,我想按照它们的顺序更改它们(或创建一个新数组)。

例如,前面给出的数组将变为 {3,5,1,6,2,4,7}。这是因为 30 是数组中的第一个数字,也是数组中第三小的数字。并且 60 是第 5 小的等等。因此我有新的数字升序而不改变它们在数组中的位置。

标签: javaarrayssorting

解决方案


我不知道它的可读性和效率如何,但我想尝试这样做。它从该范围创建一个整数流,[0, numbers.length - 1]并使用这些数字作为原始数组的索引对它们进行排序。它最后加 1 以使范围从 1 开始。

int[] numbers = {30, 60, 10, 100, 20, 50, 110};
int[] order = IntStream.range(0, numbers.length).boxed()
        .sorted(Comparator.comparingInt(e -> numbers[e]))
        .mapToInt(e -> e + 1).toArray();
System.out.println(Arrays.toString(order)); // [3, 5, 1, 6, 2, 4, 7]

推荐阅读