所以基本上,我要求排序队列,我只能使用一个帮助队列,并且只允许额外的内存量。
如何仅使用一个额外队列对队列进行排序?
答案 0 :(得分:0)
就个人而言,我不喜欢像这样的任意限制来面试问题,除非它实际上反映了你必须在公司工作的条件。我不认为它实际上找到合格的候选人,或者更确切地说,我不认为它准确地消除了不合格的候选人。 当我为公司进行技术面试时,所有问题都是切合实际的。把它放在一边。
虽然肯定有几种方法可以解决这个问题,并且使用递归肯定是一种方法,但我希望如果你试图通过递归解决它,他们会要求你在没有递归的情况下完成它,考虑到他们正在限制你可以使用的内存和数据结构。否则,他们可能会给你两个队列,一个堆栈和你想要的内存。
以下是解决此问题的一种方法示例。最后,应该对queueB进行排序。它只使用一个额外的局部变量。这是在C#中完成的。
queueB.Enqueue(queueA.Dequeue());
while (queueA.Count > 0)
{
int next = queueA.Dequeue();
for (int i = 0; i < queueB.Count; ++i)
{
if (queueB.Peek() < next)
{
queueB.Enqueue(queueB.Dequeue());
}
else
{
queueB.Enqueue(next);
next = queueB.Dequeue();
}
}
queueB.Enqueue(next);
}