1

私はこの質問が何度も尋ねられ、答えられたことを知っています。しかし、ほとんどすべてのソリューションの計算の複雑さはO(n ^ 2)です。

O(n log n)の複雑さを持つソリューションを探しています。誰か提案してもらえますか?

ヒープに感謝します、Chaitanya

4

1 に答える 1

6

エントリをにコピーし、値Listで並べ替えます。Listにコピーして戻しますLinkedHashMap。大幅に優れた解決策は不可能だと思います。

List<Entry<K, V>> entries = new ArrayList<Entry<K, V>>(map.entrySet());
Collections.sort(entries, new Comparator<Entry<K, V>>() {
  public int compare(Entry<K, V> left, Entry<K, V> right) {
    return left.getValue().compareTo(right.getValue());
  }
}
Map<K, V> sortedMap = new LinkedHashMap<K, V>(entries.size());
for (Entry<K, V> entry : entries) {
  sortedMap.put(entry.getKey(), entry.getValue());
}
于 2012-05-22T23:19:21.283 に答える