138. 24年8月-华为国内-1.数据重删

难度 5
  • 标签:
  • 大厂笔试真题华为
题目描述
题解
题库

24年8月-华为国内-1.数据重删

题目内容

数据重删是一种节约存储空间的技术,通常情况下,在数据存储池内是有很多重复的数据块。重删则是将这些重复的数据块找出并处理的技术。简单地说,重删就是将N份重复的数据块仅保留1份,并将N-1份数据的地址指针指向唯一的那一份。

我们输入一串存储的数据,用N表示数据个数,用K表示数据块的大小,设计一个方法判断当前数据块是否和前面的数据块有重复,两个数据块内容完全一样则表示重复。如果重复则将这个数据块删除,并且在第一个出现数据块的后面增加重复数据的计数,输出经过重删之后的内容。

解答要求

时间限制:C/C++ 1000ms,其他语言2000ms
内存限制:C/C++ 256MB,其他语言512MB

输入描述

  • 8输入数据的个数
  • 2数据块的大小
  • 1 2 3 4 1 2 3 4依次是数据值

输出描述

输出结果为去除重复数据后的结果,输出结果最后没有空格,以数字结尾,输出内容不改变输入数据块的顺序。

样例1

输入

8
2 
1 2 3 4 1 2 3 4

输出

1 2 2 3 4 2 

解释 总共8个数据,数据库的大小为2,按新窗口进行切片表示一个数据块,分别得到数据库为 [1,2], [3,4], [1,2], [3,4]。其中第一个数据块和第三个数据块相同,第二个数据块和第四个数据块相同,可以分别进行重删,重删之后数据块 [1,2] 的计数变为2,表示有两个相同的数据块 [1,2],同理 [3,4] 的数据块计数性变为2。

样例2

输入

8
3
3 4 5 3 4 5 5 4 

输出

3 4 5 2 5 4 1