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来解决,有兴趣的小伙伴试试。。第一篇博客写的好烂。。。。。。。
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来解决,有兴趣的小伙伴试试。。第一篇博客写的好烂。。。。。。。
相关文章推荐
- 关于这两天遇到的一个问题
- 今天遇到一个关于STL中排序的问题, 怀疑是sort的bug!
- 今天遇到的一个关于HttpSessionListener 的一个问题
- 由一个朋友遇到的问题想到的关于程序的架构
- 由一个朋友遇到的问题想到的关于程序的架构
- 遇到一个关于ObjectDataSource的奇怪问题
- 关于加载设计器遇到一个或多个错误问题的解决方案
- 小程序大问题,MSDN中一个小小示例所带来的疑问,一个关于DataList的一个简单应用
- 小程序大问题,MSDN中一个小小示例所带来的疑问,一个关于DataList的一个简单应用
- 最近遇到一个非常棘手的需求是关于邮件转发的问题,请大家来帮忙给出出主意如何实现。
- 一个关于SQL的问题,做做看,好想跟经常遇到的有点不同
- 面试里经常遇到的一个关于StringBuffer和final的问题
- 今天在csdn上遇到一个问题,是关于sql数据行列转换的,我的写法如下:
- 关于DLL中遇到的一个问题
- 遇到的一个关于printf()的小问题。
- 关于XML数据存储时遇到的字符编码的一个怪问题
- 工作中遇到的一个相当有意思的问题(关于Windows和linux环境下执行PHP,ajax,javascript,flexigrid的一个莫名异常)
- 遇到的一个关于NULL小问题,请大家帮忙看下,求个解释
- 遇到关于strtok的一个问题,郁闷了好一会儿终于找到答案
- 遇到的一个关于自增的小问题、、