回答
鉴于在原岗位缺乏约束,你可以弹出了所有的数据和计算运行最大值:
if empty(st) -> raise exception
m <- pop(st)
while not empty(st)
n <- pop(st)
if n > m
m <- n
编辑(用新的限制,原来的堆栈不变,第二个可用的堆栈的新资源):
if empty(st) -> raise exception
m <- pop(st)
push(alt_st, m)
while not empty(st)
n <- pop(st)
push(alt_st, n)
if n > m
m <- n
while not empty(alt_st):
n <- pop(alt_st)
push(st, n)
不,原来的堆栈应该没有改变 – 2011-12-29 06:11:14
因为原来的堆栈不能只读(Pop
,访问数据的唯一途径,也改变栈),我们必须考虑到,“日e栈应该不变“的限制意味着我们必须在完成后将其恢复到原始状态。
我们可以通过使用方法的另一组由雷蒙德赫廷杰建议去做:
int get_max_from_stack(Stack stack) {
int M = stack.pop();
Stack aux;
aux.push(M);
while (!stack.empty()){
int tmp = stack.pop();
aux.push(tmp);
M = max(M, tmp);
};
while (!aux.empty())
stack.push(aux.pop());
return M;
};
有解决这个问题的方式有两种,你可以做一个函数get_max
这给在堆栈中的最大数量,或者您可以保留一些额外的信息,您可以在O(1)
操作中给出堆栈中的最大数量,但代价为extra space
。我会给你后一种解决方案。
您需要做的就是拥有一个extra stack
,该堆栈的最大元素位于顶部,用于堆栈的任何配置。
- 当你按下一个号码给您原来的堆栈,请执行下列操作为
max_stack
,比较max_stack顶部的当前值和推动更大的一个在其上。 - 当你取出了一些简单的流行从
max_stack
- 最上面的号码当你需要找出
max
值随便挑栈顶从max_stack
。
这样你就可以获得O(1)
时间内的最大数字,而推动和弹出操作也仍然是O(1)
。我可以给你代码,但没有什么内容,因为它很简单。例如,如果您在订单
5 - 2 - 6 - 8 - 1
max_stack
推下面的数字将包含
5 - 5 - 6 - 8 - 8
,并为您pop
号码的当前max
将在顶部。
我希望解决方案很明确。
嗨Sachin,谢谢你的回复! – 2011-12-29 13:48:06
其实更常见的问题你将如何在'O(1)'时间内支持'push','pop','get_max'和'get_min'操作,或者'' – Sachin 2011-12-29 14:04:57
- 1. 使用push和pop的堆栈
- 2. 堆栈中的push和pop矩阵(openGL)
- 3. Push和Pop对堆栈有什么意义?
- 4. Clojure的:pop和push
- 5. C++堆栈/堆栈。为什么只有一个新操作员?
- 6. 查找堆栈中发生次数最多的事件
- 7. 写作pop和push功能叠加
- 8. 使用列表的堆栈操作
- 9. 使用swing的堆栈操作
- 10. Pop和Push ViewController的区别
- 11. 查找堆栈中的最大值和最小值
- 12. Push/pop当前数据库
- 13. 如何找到变量的最大数量在堆栈
- 14. C中的链接堆栈Pop导致分段错误,但Push不行!
- 15. Java - LinkedList push()pop()意味着它是一个堆栈,而不是一个队列?
- 16. Java方法操作数堆栈
- 17. 堆栈数据结构操作
- 18. 堆栈和堆查看器
- 19. 了解heapq push pop
- 20. 使用$ cookies和$ stateChangeStart检查sessionID的最大调用堆栈
- 21. 使用堆栈的数组实现寻找多数(领导者)
- 22. 在Assembly中使用堆栈查找数组中的数字8086
- 23. 在Zend中使用操作堆栈时在操作之间存在数据
- 24. 初始化可以找到最小数量的堆栈。 Java
- 25. 只跟踪子进程的堆和堆栈使用情况
- 26. 为什么我的push和pop方法不起作用?
- 27. MongoDB的模式结构 - push和pop
- 28. push和pop增加现场字节
- 29. 如何在Scheme中编写Push和Pop?
- 30. Ruby:内存中的Shift,Push和Pop
您的意思是“找到最大的数字,将堆栈保留在其初始配置中?”我们可以有多个堆栈吗? – templatetypedef 2011-12-29 03:48:03
大概你也可以使用比较 - 否则,找到最大值会有点难度;-)另外,你将需要一个堆栈空测试 - 否则,你怎么知道你什么时候全部数据。是否还有其他约束条件(即堆栈是否必须恢复到原始状态?) – 2011-12-29 03:49:26
是的,初始配置应该没有改变,我们可以使用另一个堆栈以及 – 2011-12-29 06:11:55