回答
鑑於在原崗位缺乏約束,你可以彈出了所有的數據和計算運行最大值:
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函數將BST轉換爲數組
- 4. (C++)無法從堆棧對象中調用push()和pop()
- 5. Push和Pop對堆棧有什麼意義?
- 6. OS堆棧和OS堆棧在多核操作系統中
- 7. Clojure的:pop和push
- 8. C++堆棧/堆棧。爲什麼只有一個新操作員?
- 9. 操作數堆棧不足
- 10. 找出哪個對象/數組使用最多堆棧內存
- 11. C --- pop()函數中的堆棧
- 12. 查找堆棧中發生次數最多的事件
- 13. 是否可以在Javascript hashmap上執行push和pop操作?
- 14. 使用swing的堆棧操作
- 15. 使用列表的堆棧操作
- 16. 寫作pop和push功能疊加
- 17. 如何使用Stack的push和pop操作組合兩個字符串?
- 18. 解釋Push和Pop Loop
- 19. Pop和Push ViewController的區別
- 20. WPF Push and Pop
- 21. 查找堆棧中的最大值和最小值
- 22. 如何找到變量的最大數量在堆棧
- 23. Push/pop當前數據庫
- 24. 組裝(68k)堆棧操作
- 25. ios導航堆棧操作
- 26. 使用堆棧查找加權圖的最短路徑
- 27. Java - LinkedList push()pop()意味着它是一個堆棧,而不是一個隊列?
- 28. C中的鏈接堆棧Pop導致分段錯誤,但Push不行!
- 29. Java方法操作數堆棧
- 30. 堆棧數據結構操作
您的意思是「找到最大的數字,將堆棧保留在其初始配置中?」我們可以有多個堆棧嗎? – templatetypedef 2011-12-29 03:48:03
大概你也可以使用比較 - 否則,找到最大值會有點難度;-)另外,你將需要一個堆棧空測試 - 否則,你怎麼知道你什麼時候全部數據。是否還有其他約束條件(即堆棧是否必須恢復到原始狀態?) – 2011-12-29 03:49:26
是的,初始配置應該沒有改變,我們可以使用另一個堆棧以及 – 2011-12-29 06:11:55