我使用两个堆栈实现了一个队列,我想找到队列中的前N%元素。
例如:
队列按此顺序获取元素{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
前10%的元素意味着10%的20 = 2
因此答案应为19和20
我能想到两种方式
有没有更好的方法来解决这个问题?
答案 0 :(得分:0)
队列不是最佳的数据结构,因为您不应该访问其中的元素(大多数队列实现甚至不提供访问操作符),因此您不应对其进行排序。因此,如果由于某些其他要求而不需要队列,我建议您使用普通数组。
排序是一个非常耗时的过程。当您读取/插入队列元素时,您可以计算它们的总和。根据已知总和,元素数量和所需百分比,您可以计算阈值。然后,您需要遍历元素(如果使用队列,您可以逐个提取它们)并显示大于计算阈值的那些元素。
答案 1 :(得分:0)
您可以使用其他数据结构来保持元素的排序。例如,您可以使用skip list,有序tiered vector或某些二叉搜索树。
在大多数编程语言中都有一个内置的RB树,但是你将无法使用它。您需要在每个节点中添加有关其左右子树权重的信息。
答案 2 :(得分:0)
您可以将二进制搜索树/“有序集”与队列结合使用。
向队列(队列的后面)添加元素时,同时将其添加到集合中。 从队列的(前面)删除元素时,同时将其从集合中删除。
为了找到队列中前N%的元素,您可以从顶部元素循环遍历该集合,直到下一个元素不符合前N%条件。这是因为该集合维护了队列中元素的有序列表。
此外,由于您的原始队列结构仍然存在,您仍然可以保留队列中元素的相对顺序。