我得到一个数组,我想在数组的排序版本中找到这些元素的位置。因此,输入和输出如下所示
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将位于第四个索引中,即sortedinput [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;
}
有没有办法,如上所述,不使用lambdas,以及Java 8的任何功能?是否可以仅使用比较器实现此目的?
答案 0 :(得分:3)
lambda表达式总是可以被它实现的功能接口替换(在你的情况下为Comparator<Integer>
)。写作只需要更长时间:
Arrays.sort(index, new Comparator<Integer> () {
public int compare (Integer a, Integer b) {
return Integer.compare(nums[b],nums[a]);
}
});
答案 1 :(得分:1)
Comparator<T>
界面为FunctionalInterface
,并标注为注释@FunctionalInterface
的界面。
从Java 8开始,您可以像在Arrays.sort方法中一样使用FunctionalInterfaces和Lambda表达式。
表达式可以替换为anonymous inner class而代码正在爆炸,但结果是相同的:
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, new Comparator<Integer>()
{
@Override
public int compare(Integer a, Integer b)
{
return nums[b] - nums[a];
}
});
return index;
}
答案 2 :(得分:0)
基本理念:
详细说明第3步:如果您使用冒泡排序,例如,每次在要排序的数组中交换元素i和j时,都会使用相同的索引交换新数组中的元素