我正在嘗試解決有關hackerrank的問題。但我每次都收到emptyStack例外。我想這可能是因為我將堆疊傳遞給getMax函式并且它正在更改原始堆疊。
我試圖在 getMax 中寫這個,希望它不會影響最終堆疊,但它沒有用。
Stack<Integer> s=st;
你能指出并解釋我犯的錯誤嗎?
對于某些測驗用例,該程式運行良好。 (0,2,27)
問題鏈接:https : //www.hackerrank.com/challenges/maximum-element/copy-from/243724938
我的解決方案:
import java.util.*; class Solution { static void getMax(Stack<Integer> st) { Stack<Integer> s=st; int max=s.peek(); s.pop(); while(!s.empty()) { if(s.peek()>max) max=s.peek(); s.pop(); } System.out.println(max); } public static void main(String args[]) { Stack<Integer> s=new Stack<Integer>(); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); while(n-->0) { int c=sc.nextInt(); if(c==1) s.push(sc.nextInt()); else if(c==2) s.pop(); else getMax(s); } } }

uj5u.com熱心網友回復:
但我每次都收到 emptyStack 例外。
因為當你執行時stack.pop,堆疊已經是空的。
在你的getMax方法中,Stack<Integer> s=st這個操作并沒有復制堆疊,也就是說st和s參考的是同一個物件,所以你后續的操作會影響到原來的堆疊。
更改Stack<Integer> s=st;為Stack<Integer> s= (Stack<Integer>) st.clone();。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/362399.html
