ソートされていない整数配列と、0 <= i <= j <= C (定数は MAX_INTEGER と言う) となるような 2 つの数値 i と j が与えられた場合、その数値を見つけるためにどのような前処理を実行できるかo(1) 時間での i と j (両方を含む) の間の数。配列は重複することもあります。
私は、配列内の要素(空間o(C))の頻度配列f []と、累積頻度(空間o(C))の別の配列cf []を構築することを考えていました。
したがって、i と j が与えられた場合、累積頻度配列を検索して cf[j] - cf[i] を実行できます。これにより、i と j の間の要素の数が得られます。i と j を含めるには、頻度配列を調べて値を追加します。すなわち cf[j] - cf[i] + f[i]+f[j] 時間の計算量は o(1) * 4 = 定数時間になります。
周波数配列でのルックアップは、それぞれの方向の i と j の両方について前の非ゼロ cf 配列要素を見つけることで回避できます。これにより、時間の複雑さが増しますが、空間の複雑さが軽減されます。
この問題に対するより良い解決策があるかどうか知りたいです。
注 - i と j の値は、前処理が完了した後にのみ使用できます。
-ビジェイ