我试图找出以下问题的最佳解决方案:给定一个范围为1-5的20个整数的堆栈,对堆栈进行排序,使只有1-4的值保持升序。您一次只能移动一个值。
我实现了一个迭代的
我应该考虑哪一种类型?我应该考虑哪些数据类型?对于给定的问题,最好的可能更坏的情况是什么O(?)?
HashMap<Integer, Integer> map = new HashMap<>();
map.put(1, 0);
map.put(2, 0);
map.put(3, 0);
map.put(4, 0);
int popped;
while(!stack.isEmpty()){
popped = stack.pop();
if(map.containsKey(popped)){
map.put(popped, map.get(popped)+1);
}
}
while (map.get(4)>0){
stack.push(4);
map.put(4, map.get(4)-1);
}
while (map.get(3)>0){
stack.push(3);
map.put(3, map.get(3)-1);
}
while (map.get(2)>0){
stack.push(2);
map.put(2, map.get(2)-1);
}
while (map.get(1)>0){
stack.push(1);
map.put(1, map.get(1)-1);
}
您正在重新创建计数排序算法,该算法在O(n)中运行。
相反,一个< code>HashMap你可以使用一个普通数组。您肯定不需要这种多余的< code > while -循环。
我已经在Java和C中找到了这个问题的几个实现,但我还没有找到一个使用JavaScript的示例。这是一个相当常见的技术面试问题: 在2n空间中对堆栈进行排序。(仅使用2个堆栈对堆栈进行排序)
给定一个堆栈,任务是对它进行排序,使堆栈的顶部具有最大的元素。 示例1: 输入:堆栈:3 2 1输出:3 2 1示例2: 输入:堆栈:11 2 32 3 41输出:41 32 11 3 2 您的任务: 预期时间复杂度:O(N*N)预期辅助空间:O(N)递归。 约束:1
有3个堆栈-A、B、C 堆栈A和B被排序(堆栈顶部的数字最大)。堆栈C为空,仅允许5次操作: 推,弹出,顶,is_empty,创建 我们需要编写一个函数来接收堆栈A和B,将堆栈A和B中的所有数字移动到堆栈C,堆栈C必须排序(最大数字在顶部)。 我有算法: 比较A的顶部和B的顶部 我开始写代码,但有错误,我不知道为什么! 代码:
我试图理解使用中给出的递归对堆栈元素进行排序http://www.geeksforgeeks.org/sort-a-stack-using-recursion/不允许使用while、for…等任何循环结构。我们只能在堆栈S上使用以下ADT函数: is_empty(S):测试堆栈是否为空。 push(S) :向堆栈添加新元素。 Pop(S):从堆栈中删除顶部元素。 top(S) :返回 top 元素
输入=堆栈数 但是你只能弹出输入,你不能推到它。输出也是另一个堆栈,你可以返回并推到它,但不能弹出 所以如果 由于您无法在中返回到
哪种排序算法适合对堆栈进行排序以提高空间效率?我需要对堆栈进行“就地”排序。此外,我对“就地”算法的理解是它们不使用任何其他数据结构 - 这是正确的吗? 我知道这与这个问题相似,但我想知道堆栈是否会有所不同?我知道堆栈可以只是一种链接列表,但是你只能访问顶部的事实会改变你的做法吗?