现在有一种这样的业务,要求设计一个合适的数据结构去表示(不是习题,是我工作中遇到的)
A是发送者,B是接收者
A在一段时间内会一直给B发包,包上面有包号:1,2,3,4单调递增
B在接收到之后,要一直记录这些包号,1,2,3,4
有可能B接收的包号不是递增的,比如1,2,4,7. 然后3,5,6未必能接收到
B最多记录256个包号
B经常需要从接收到的包里面取出最大的包号,比如7
B有时候需要删除小于某个包号的一系列包。比如要删除5, 那么B接收到的包号就变成7,以后再接收到4,也会忽略。
如果B收到两个一样的包号,那要报异常
对于以上的业务,可以设计一种怎么样的数据结构去存储?
我目前的想法是用最大堆,B每收到一个包就加进去堆里面,堆顶元素就是最大的包号。
对于删除,只能想到先排序再二分定位,把剩下的元素再构建一个最大堆。但无法做到“以后再接收到4,也会忽略”
无法识别两个一样的包号
也有想过直接用一个256长度的数组,另外增加一个最大包号和最小包号的变量
每收到一个包,就在数组相应的位置增加一个记录,并更新最大包号和最小包号的变量
要删除5,就把B里面所有大于5的号往前挪位置
很容易识别两个一样的包号
但总感觉后面的方法太笨了,有无更好的数据结构可以支持这样的操作?
要不要考虑一下线段树,对基础的线段数做一下拓展。