您的位置:首页 > 其它

LeetCode上关于Min Stack遇到的一个小小问题

2015-05-07 15:25 169 查看
一个宁静的下午,,百般无聊地打开了leetcode,看到了Min Stack这道题。Design a stack that supports push, pop, top, and retrieving the minimum element in constant
time.看了下函数,花了几秒钟想了下,思路倒也是简单。设置一个dataStack,另外设置一个minStack。minStack用来存放min值。。这里有点需要注意的是,当dataStack中最小值重复时,minStack里面也需要重复加入该值。然后就开始写代码了:::::

import java.util.Stack;

class MinStack {

Stack<Integer> dataStack = new Stack<>();

Stack<Integer> minStack = new Stack<>();

public void push(int x) {

dataStack.push( x );

if( minStack.empty()|| x<= minStack.peek())

minStack.push(x);

}

public void pop() {

if( !dataStack.empty() ){

if (minStack.peek() == dataStack.peek() ) minStack.pop();

dataStack.pop();

}

}

public int top() {

return dataStack.peek();

}

public int getMin() {

return minStack.peek();

}

}

运行结果如下:

明显。。程序某个地方出错了,运行结果与预期不符合。。然后一直在找一直在找,找了近20分钟,,最后终于找到哪里错了。错误在这句:

if
(minStack.peek() == dataStack.peek() ) minStack.pop();


到这里,我想有点java基础的同学都能发现是什么错误了。

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容。
因此,我们在这里不能使用 == 来比较我们的Integer对象内容是相等,而是使用equals比较。
ok,运行成功。。。
总结:太久没用java都开始有点生疏了。。导致这么基础的东西都忘了。。惭愧。。另外,这道题还可以用list来解决,有兴趣的小伙伴试试。。第一篇博客写的好烂。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: