【发布时间】:2014-09-10 15:15:13
【问题描述】:
我已经使用两个堆栈实现了一个队列,我想找到队列中前 N% 的元素。
例如:
队列按此顺序取元素{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
前 10% 的元素意味着 20 的 10% = 2
因此答案应该是 19 和 20
我能想到的方法有两种
- 对队列进行排序,计算 N% 的项目数 (X),然后获取前 X 个元素。
- Selection algorithm。 (我刚刚遇到这个算法,它基于快速排序的思想。所以我可能不得不将整个队列复制到一个数组中,然后应用该算法)
有没有更好的办法解决这个问题?
【问题讨论】:
-
“我已经使用两个堆栈实现了一个队列”您对纯功能解决方案感兴趣还是只是一个练习?
-
这只是一个练习。即使是在算法之间进行比较的想法也可以。我上面的两种方法是 O(nlogn) 和 O(n)。平均而言,两者似乎都相当快。但是,我想知道一种更好的方法,或者很简单,如果这是唯一的两种方法,以及我是否应该使用选择算法
-
您是否正在寻找总能在 O(1) 中提供 MAX 的 MAXQUEUE 的泛化?在这种情况下,对于给定的队列实例,N 是固定值吗?