将堆栈传递给函数
Passing Stack to a function
我正在尝试解决关于 hackerrank.But 的问题 我一直收到 emptyStack 异常 每次 time.I 认为这可能是因为我正在将堆栈传递给getMax 函数,它正在改变原始堆栈。
我试着在 getMax 中写这个,希望它不会影响最终的堆栈,但它没有用。
Stack<Integer> s=st;
你能指出并解释我犯的错误吗?
该程序 运行 对于某些测试用例来说非常好。(0,2,27)
问题Link: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);
}
}
}
But I keep getting emptyStack exception every time.
因为当你执行stack.pop
的时候,栈已经是空的了
在你的getMax
方法中,Stack<Integer> s=st
这个操作并没有复制栈,也就是说st
和s
指的是同一个对象,所以你后面的操作会影响原来的堆栈。
将 Stack<Integer> s=st;
更改为 Stack<Integer> s= (Stack<Integer>) st.clone();
。
我正在尝试解决关于 hackerrank.But 的问题 我一直收到 emptyStack 异常 每次 time.I 认为这可能是因为我正在将堆栈传递给getMax 函数,它正在改变原始堆栈。
我试着在 getMax 中写这个,希望它不会影响最终的堆栈,但它没有用。
Stack<Integer> s=st;
你能指出并解释我犯的错误吗?
该程序 运行 对于某些测试用例来说非常好。(0,2,27)
问题Link: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); } } }
But I keep getting emptyStack exception every time.
因为当你执行stack.pop
的时候,栈已经是空的了
在你的getMax
方法中,Stack<Integer> s=st
这个操作并没有复制栈,也就是说st
和s
指的是同一个对象,所以你后面的操作会影响原来的堆栈。
将 Stack<Integer> s=st;
更改为 Stack<Integer> s= (Stack<Integer>) st.clone();
。