假设我有一个任意的 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中,第一个值是索引,第二个是值)
此外,我已将此压缩序列划分为 ArrayList of Entries。也就是说,每个条目都是以下之一: (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++;
}
}
如您所见,这变得越来越草率...
谢谢!