Скажем, у меня есть произвольная последовательность RLE. (Для тех, кто не знает, RLE сжимает массив типа [4 4 4 4 4 6 6 1 1] в [(5,4) (2,6) (2,1)]. Сначала идет число конкретное целое число в серии, затем само число.)
Как я могу определить алгоритм для установки значения по заданному индексу без распаковки всего этого? Например, если вы установите (0,1), RLE станет [(1,1) (4,4) (2,6) (2,1)]. (В наборе первое значение — индекс, второе — значение)
Кроме того, я разделил эту сжатую последовательность на список записей 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++;
}
}
Как вы можете видеть, это становится все более небрежным...
Спасибо!