f*****g 发帖数: 887 | 1 leecode那道min stack题目,哪位牛人帮看看
class MinStack {
private Stack st = new Stack();
private Stack min = new Stack();
public void push(int num) {
st.push(num);
if (min.isEmpty() || num <= min.peek()) {
min.push(num);
}
}
public void pop() {
if (st.peek() == min.peek()) {
min.pop();
}
st.pop();
}
public int top() {
return st.peek();
}
public int getMin() {
return min.peek();
}
}
Input: push(512),push(-1024),push(-1024),push(512),pop,getMin,pop,getMin,
pop,getMin
Output: [-1024,-1024,-1024]
Expected: [-1024,-1024,512] |
r*******e 发帖数: 971 | 2 public void pop() {
int t=st.peek(),m=min.peek();
if (t==m) {
min.pop();
}
st.pop();
} |
f********c 发帖数: 147 | 3 请问为啥你这样写就是对的啊?感觉peek直接对比也没问题吧,不过就是过不了。
【在 r*******e 的大作中提到】 : public void pop() { : int t=st.peek(),m=min.peek(); : if (t==m) { : min.pop(); : } : st.pop(); : }
|
s****i 发帖数: 65 | 4 或者
public void pop() {
if (st.peek().equals(min.peek())) {//改成equals
min.pop();
}
st.pop();
}
查看peek() return的是Object类对象 |
h****z 发帖数: 11 | 5 Java Integer 是不能直接判断相等的, 虽然数值相等, 但是 Object Id 不等所以st
.peek() == min.peek()就不对了,
改成 st.peek().intValue() == min.peek().intValue() 就行了 |
r*******e 发帖数: 971 | 6 楼上说了,而且这里特别坑爹。如果value 在-128 --- 127 范围内,你原来写法
是能过的。
【在 f********c 的大作中提到】 : 请问为啥你这样写就是对的啊?感觉peek直接对比也没问题吧,不过就是过不了。
|
f*****g 发帖数: 887 | 7 以前其他类型都用equals判断的,没想到整型变量也需要,长知识了
st
【在 h****z 的大作中提到】 : Java Integer 是不能直接判断相等的, 虽然数值相等, 但是 Object Id 不等所以st : .peek() == min.peek()就不对了, : 改成 st.peek().intValue() == min.peek().intValue() 就行了
|
j*****0 发帖数: 160 | 8 我的pop是这么写的
int i = st.pop();
if (i == min.peek()) {
min.pop();
} |