有一个随机整数生成器,它生成随机整数,并在后台运行。需要设计一个API,以便在调用时返回簇的数量。
集群:集群是连续整数的字典顺序。例如,10,7,1,2,8,5,9在这种情况下,簇是3(1,2--5--7,8,9,10)。
如果有数十亿或数万亿的整数,如何解决这个问题。什么是最佳解决方案? (请记住,生成器正在后台运行,并且可以随时多次调用API)
我的方法:继续将生成器中的整数插入到列表中。调用API时,对列表进行排序(插入),然后遍历它以查找簇的数量。但我认为这不是一种有效的方法。
答案 0 :(得分:0)
某种间隔树怎么样?不是标准的,可以跟踪重叠的间隔,而是一个更简单的跟踪不相交的间隔并自动合并重叠/相邻间隔。
所以是间隔的BST,按开始排序。要插入新的间隔,
群集的数量在任何时候都是叶子的数量。您甚至不必显式计算它们,只需在更改树时更新计数。
插入是集群数量的对数,它们的大小无关紧要。这有一个有趣的副作用,对于随机整数,这会慢一些,因为树必须主要代表单位间隔,但当有足够的整数时,它会慢慢开始变得更快,因为超过某一点插入会倾向于加入比他们创造的更多的间隔。最终,对于树中的每个整数,它只剩下一个节点,表示跨越所有整数的单个集群。