给定一个数组,我想找到这些元素在数组的排序版本中的位置。因此,输入和输出如下所示
Input : {10, 5, 4, 9, 8, 3, 2, 1, 6, 7}
Output: {0, 3, 4, 9, 8, 1, 2, 5, 6, 7}
这意味着,10 将位于排序数组中的第 0 个位置,而 5 将位于第四个索引,即排序输入[3]。
这是一个单行代码,可以做到这一点
Arrays.sort(index, (a, b) -> (nums[b] - nums[a]));
该方法如下所示
public Integer[] findIndexInSortedArray(int[] nums) {
Integer[] index = new Integer[nums.length];
for (int i = 0; i < nums.length; i++) {
index[i] = i;
}
Arrays.sort(index, (a, b) -> (nums[b] - nums[a]));
return index;
}
有没有一种方法可以完成与上面相同的操作,而不使用 lambda 和 Java 8 的任何功能?仅使用比较器是否可以实现此目的?
最佳答案
lambda 表达式始终可以被它实现的函数接口(interface)替换(在您的例子中为 Comparator<Integer>
)。只是需要更长的时间来写:
Arrays.sort(index, new Comparator<Integer> () {
public int compare (Integer a, Integer b) {
return Integer.compare(nums[b],nums[a]);
}
});
关于java - 对数组进行排序后获取元素的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42971566/