任意の RLE シーケンスがあるとします。(知らない人のために説明すると、RLE は [4 4 4 4 4 6 6 1 1] のような配列を [(5,4) (2,6) (2,1)] に圧縮します。最初に a の数が来ます。実行中の特定の整数、次に数値自体)。
全体を解凍せずに特定のインデックスに値を設定するアルゴリズムを決定するにはどうすればよいですか? たとえば、set(0,1) を実行すると、RLE は [(1,1) (4,4) (2,6) (2,1)] になります。(set では、最初の値はインデックス、2 番目の値は値です)
また、この圧縮されたシーケンスをエントリの ArrayList に分割しました。つまり、各エントリは次のいずれかです: (1,1) 量と値があります。
私はこれを行うための効率的な方法を見つけようとしていますが、今のところ、クリーンと見なされるにはあまりにも多くの if ステートメントを持つメソッドを考えることができます。非常に多くのバリエーションがあります。たとえば、指定された値が既存のエントリを分割する場合、または既存のエントリと同じ値を持つ場合など...
どんな助けでも大歓迎です。私は現在アルゴリズムに取り組んでいます。ここにその一部があります:
while(i<rleAL.size() && count != index)
{
indexToStop=0;
while(count<index || indexToStop == rleAL.get(i).getAmount())
{
count++;
indexToStop++;
}
if(count != index)
{
i++;
}
}
ご覧のとおり、これはますますずさんになっています...
ありがとう!