簡體   English   中英

java中如何根據數組的值對數組進行排序

[英]How to rank an array according to values of the array in java

我必須根據相同位置的值對數組進行排名。 例如:

值 = {5, 1, 4 }

結果排名數組將是:{1, 3 ,2}

如何在不排序數組的情況下實現這一目標?

你應該這樣寫:

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. 循環遍歷數組並初始化 TreeMap rankMap,其中 Rank = {int rank = 0;},通過放入 map key = input[I] 和 value = 默認新 Rank 實例; 復雜度≈ O(N*log(N)); 內存≈ O(N)
  2. S = rankMap.size();
  3. 通過 S - I 初始化 Rank 實例來遍歷映射:最小條目的等級為 S; O(N) 操作;
  4. 循環遍歷 rankMap.get(input[i]).rank 值的原始數組和輸出流;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM