如何根据java中数组的值对数组进行排名

时间:2016-03-30 15:17:07

标签: java arrays

我必须根据值在同一位置对数组进行排名。 例如:

值= {5,1,4}

得到的排名数组将是:{1,3,2}

如何在不对数组进行排序的情况下实现此目的?

2 个答案:

答案 0 :(得分:3)

你应该写这样的东西:

public static int[] getRanksArray(int[] array) {
    int[] result = new int[array.length];

    for (int i = 0; i < array.length; i++) {
        int count = 0;
        for (int j = 0; j < array.length; j++) {
            if (array[j] > array[i]) {
                count++;
            }
        }
        result[i] = count + 1;
    }
    return result;
}

此方法返回带有排名的数组,其中索引对应于输入数组中的值索引(如果值相等,则它们共享一个公共排名)

你不能使用排序,所以我没有看到任何方法来避免 O(NxN)渐近复杂度和 O(N)辅助空间:(

答案 1 :(得分:0)

如果您不能使用显式排序,请使用隐式排序:

  1. 通过遍历数组并初始化TreeMap rankMap,通过将map =输入[I]和value =默认的新Rank实例放入Map = Rank int = 0;}。复杂度≈O(N * log(N));记忆≈O(N)
  2. S = rankMap.size();
  3. 通过用S-I初始化Rank实例来遍历地图:最小的条目是S等级; O(N)操作;
  4. 循环遍历原始数组并输出rankMap.get(input [i])。rank值的流;