我的考试问题如下:
设S是一组动态整数。一开始,S是空的。然后,新的整数 被逐一添加到它,但从未删除。设k是一个固定的整数。
描述一种算法 保持S中的k个最大整数。无论如何,您的算法必须始终使用O(k)空间 多大| S |是(注意| S |连续增加,但你的空间不能)。
此外,它必须 处理O(log k)时间内的每个整数插入。
例如,假设k = 3,并且插入的整数序列是83,21,66,5,24, 76,92,32,43 ......插入24后,你的算法必须保持{83,66,24},{83,66,76} 插入76之后,插入43后{83,76,92}。
没有S被排序或结构我不确定我将如何完成这个?
答案 0 :(得分:0)
您可以使用大小为k的最小堆来解决它。 min-heap是一个完整的二叉树,其中每个内部节点中的值小于或等于该节点子节点中的值。但是你所要做的只是限制堆的大小,每次获得一个新元素时,只检查该元素是否大于根元素,如果不检查堆中已有的其他元素,如果是,则替换具有新元素的元素。正如您所要求的那样,它需要O(k)空间,插入时间也是O(log k)。希望它能帮到你。