配列の各要素のランクを、同点の場合は平均して効率的に見つけるにはどうすればよいでしょうか? 例えば:
float[] rank(T)(T[] input) {
// Implementation
}
auto foo = rank([3,6,4,2,2]); // foo == [3, 5, 4, 1.5, 1.5]
私が考えることができる唯一の方法は、3 つの配列を割り当てる必要があります。
- ソートする必要があり、所有していないため、入力配列の複製。
- 入力配列がソートされた順序を追跡するための配列。
- 返すランクの配列。
O(N log N) の時間と O(1) の補助空間 (つまり、割り当てなければならない唯一の配列は、返される配列だけです) でこれを行う方法を知っている人はいますか?上記の3つの配列?