2016-05-24 8 views
0

の要素の順序マップを得る:例えばアレイ

入力が{2,8、5、6、10}である場合、 を出力は、{1、4、2、3、5}であろう。 ソース配列の最小値は2であるため、次数は1です。配列内の最大値は10です。したがって、orderは入力配列の長さです。

入力配列を最初にソートして、各要素のインデックスを見つけるのは簡単です。しかし、より最適化された方法があるかどうかを知りたい。

注文がゼロベースであるか1ベースであるかは関係ありません。

答えて

1
  • 各要素を(要素、インデックス)のペアで置き換えます。 {2,8,5,6,10}{(2,1),(8,2),(5,3),(6,4),(10,5)}になります。この配列をAとします。
  • 並べ替えA。あなたは今持っています{(2,1),(5,3),(6,4),(8,2),(10,5)}
  • それぞれについてi からlength(A)までB[A[i].second_element] <- iです。あなたの場合: B[1] <- 1 B[3] <- 2 B[4] <- 3 B[2] <- 4 B[5] <- 5

  • 今すぐB={1,4,2,3,5}。利益!