algorithm - 使用 O(1) 空间的运行长度编码

标签 algorithm run-length-encoding

我们可以就地进行行程编码吗(假设输入数组非常大) 我们可以为AAAABBBBCCCCDDDD等案例做 A4B4C4D4

但是ABCDEFG这样的case怎么办呢? 其中输出为 A1B1C1D1E1F1G1

最佳答案

我的第一个想法是从末尾开始编码,所以我们将使用空闲空间(如果有的话),然后我们可以将编码数组移到开头。这种方法的一个问题是它不适用于 AAAAB,因为没有可用空间(A4B1 不需要它),我们将尝试在第一次迭代时写入 AAAAB1。

下面是更正的解决方案: (假设序列是 AAABBC)

  1. 用两个或更多元素对所有组进行编码并保持其余不变(这不会增加数组的长度)-> A3_B2C
  2. 将所有内容右移,消除第一步后的空格 -> _A3B2C
  3. 从头开始对数组进行编码(当然是重复使用已经编码的组)-> A3B2C1

每一步都是 O(n),据我所知,只需要恒定的额外内存。

限制:

  1. 不支持数字,但如 Petar Petrov 所述,无论如何都会造成解码问题。
  2. 我们需要某种“空”字符,但这可以通过添加零来解决:A03 而不是 A3_

关于algorithm - 使用 O(1) 空间的运行长度编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10926851/

相关文章:

java - 给定四个坐标检查它是否形成一个正方形

c# - 在 .net 中搜索不等式的排序 double

algorithm - 制作您自己的通配符并识别模式以压缩您的列表

matlab - 来自具有组中元素数量的向量的组索引向量

Ruby 运行长度编码失败

java - 游程编码程序的数字在字母之前

algorithm - 在 heapify 上绑定(bind)更紧

java - 如何改进我的质数和算法?

c - RLE 实现偶尔会失败

r - 从 real() 对象中减去最后 N 个值