给定一个数值范围和一个在该范围内的使用数字列表,我需要将范围压缩为已使用和未使用的数字块。
例如:
range: 0 to 10
used: 3,4,5,9
我需要像这样的输出
0-2: free
3-5: used
6-8: free
9: used
10: free
不知道从哪里开始,所以任何的指导都很感激。
发布于 2013-01-09 17:59:59
正如我所评论的,这与游程编码非常相似,事实上,如果对used
进行排序,可能会更容易一些!
对于运行长度编码,您将从数组中的第一个数字开始,并向前扫描,计算在已使用/未使用的每个转换之间的数目(或者在您的情况下,记录开始和结束索引,这基本上是等价的)。
但是,如果对used进行了排序,您已经知道了从未使用的->used的第一个转换在哪里,这样您就可以从那里开始扫描used
,以查找从used>unused的下一个转换,然后您还知道下一个未使用的->used转换为它的下一个used
号。
如果没有对used
进行排序,您可以先对其进行排序(与range
相比,如果使用的话可能是个好主意),或者您可以使用range
和used
来首先构造一个完整的已使用和未使用的数字数组,例如00011100010
并对其进行编码。
https://softwareengineering.stackexchange.com/questions/182065
复制相似问题