将给定的整数列表排在小于O(n ^ 2)

时间:2015-06-12 12:05:40

标签: java arrays algorithm time-complexity

如何为给定的整数列表中的元素分配排名? 是否存在时间复杂度小于O(n ^ 2)的算法?

Input:  2 6 7 3 9
Output: 1 3 4 2 5

1 个答案:

答案 0 :(得分:1)

您可以在O(n * log n)中通过排序:

轻松完成此操作
int[] input = //...
int[] input = new int[]{2, 6, 7, 3, 9};
Integer[] indices = new Integer[input.length];
for (int i = 0; i < indices.length; i++) {
    indices[i] = i;
}

// find permutation of indices that would yield sorted input
Arrays.sort(indices, Comparator.comparingInt(i -> input[i]));

// invert permutation and add 1 to get rank 
int[] ranks = new int[indices.length];
for (int i = 0; i < indices.length; i++) {
    ranks[indices[i]] = i+1;
}