例: A = [4, 1, 3, 2, 3, 3]. 次に、B = [16, 1, 12, 3, 12, 12] を取得します。
アプローチ 1: 各 i について、A を検索し、A[i] 以下の数値を合計します。大雑把に言えば、これには A を n 回横断する必要があるため、O(n^2) 時間かかります。
アプローチ 2: A を並べ替えて A' を取得し、A' の累積和を求めるだけです。これには、A' を 1 回だけ横断する必要があります。したがって、全体の実行時間は、O(n log n) のようなものです。
ただし、これは関係がある場合には機能しません。上記の例では、A' = [1, 2, 3, 3, 3, 6] となるため、cumsum(A') = [1, 3, 6, 9, 12, 16] となりますが、これは同じではありません。 B(ソート済み)として。
O(n log n) で引き続き実行されるようにこれを修正する方法はありますか?