回答
鑑於在原崗位缺乏約束,你可以彈出了所有的數據和計算運行最大值:
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