仅对大于k的序列进行运行长度编码



假设给定一个由数字(例如[2,3,1,1,1,1,1,1,5,6])和数字k组成的输入流/迭代器,我们需要将其编码为一个对象列表。当有K或更多相同数字的重复时,我们使用类型a的对象进行编码。在所有其他情况下,我们使用TypeB进行编码。这些类如下:

class TypeA {
int num;
int count;
}
class TypeB {
int[] nums;
}

例如,对于输入[2,3,1,1,1,1,1,1,5,6],K=5。我们返回

[TypeB([2,3]), TypeA(1,5), TypeB([5,6])]

对于输入[2,3,1,1,1,1,5,6]且K = 5,返回

[TypeB([2,3,1,1,1,1,5,6])]

从对象列表到流的解码非常简单,但是我在编写编码器时遇到了麻烦。因为我们只有当重复次数大于等于K时进行编码,我认为我们不能只保留到目前为止找到的单个数字列表,然后在状态发生变化时将其刷新到对象中。

似乎保持单个列表并在重复计数达到K(没有重复结束)时刷新它是正确的想法。你为什么认为这是错的?

考虑像第二个例子那样的极端情况——所有流内容都应该打包在一个列表中,所以我们必须一直存储这个列表,如果输出元素是列表.

如果输出也像流一样,我们可以在值改变时立即转储元素,并在需要时添加结束']'。

最新更新