本题是实现stack相关内容。
最早的时候写的代码如下,加粗部分的判断用==连接,
if(minstack.peek()==(stack.peek())
但是结果不正确,报告如下
Input:
["MinStack","push","push","push","push","pop","getMin","pop","getMin","pop","getMin"]
[[],[512],[-1024],[-1024],[512],[],[],[],[],[],[]]
Output:
["constructor","null","null","null","null","null","-1024","null","-1024","null","-1024"]
Expected:
["constructor","null","null","null","null","null","-1024","null","-1024","null","512"]
之后将加粗部分改为:
if(minstack.peek().equals(stack.peek()))
使用equals()连接,答案就是正确的了。
新人入码坑,求老师们指点一二这是为何?
另:这个结果报告是怎么看的,有点看不懂,是和二叉树有关的写法?求各位前辈指教!
谢谢!
附源码如下:
public class MinStack {
Stack<Integer> minstack = new Stack<Integer>();
Stack<Integer> stack = new Stack<Integer>();
public MinStack() {
}
public void push(int x) {
if(minstack.empty() || x <= minstack.peek())
minstack.push(x);
stack.push(x);
}
public void pop() {
**if(minstack.peek()==(stack.peek()))**
minstack.pop();
stack.pop();
}
public int top() {
return stack.peek();
}
public int getMin(){
return minstack.peek();
}
}
스택을 사용하여 구현하고 ==를 사용하여 판단하려는 것이므로 두 스택에 추가된 개체가 동일하도록 푸시할 때 제어해야 합니다.
으아악==는 참조를 비교하고, 같음은 값을 비교합니다.
==는 두 문자열이 참조하는 주소가 동일한지, 즉 동일한 객체를 가리키는지 비교하고, equals 메소드는 문자열의 내용이 같은지 비교합니다.
으아악예를 들어
a == b는 true를 반환하고, a.equals(b)도 true를 반환합니다.
으아악프로그램 실행 시 문자열 풀이 있기 때문에 문자열을 생성할 때 먼저 해당 문자열이 풀에 있는지 확인합니다. 이미 존재한다면 참조를 지정하면 됩니다. 새로운 것.
위의 예에서 a가 생성되면 문자열 풀에 "abc"가 먼저 생성되고 b가 생성되면 a가 이를 가리킵니다. "abc"가 이미 존재하므로 b는 직접 가리킬 수 있습니다. 그것.
다음으로 변경된 경우:
그런 다음 a == b는 false를 반환하고 a.equals(b)는 true를 반환합니다. 왜냐하면 b가 생성되면 "abc"가 존재하는지 여부에 관계없이 새로운 "abc"가 생성되므로 a와 b가 가리키는 캐릭터 생성 객체가 다르기 때문에 false가 반환됩니다.