classMinStack{ private Stack<Integer> stack = new Stack<>(); privateint min = Integer.MAX_VALUE;
publicMinStack(){ }
// 入栈(添加元素) publicvoidpush(int x){ if (x <= min) { // 遇到了更小的值,记录原最小值(入栈) stack.push(min); min = x; } stack.push(x); }
// 出栈(移除栈顶元素) publicvoidpop(){ if (stack.pop() == min) { min = stack.pop(); // 取出原最小值 } }
// 查找栈顶元素 publicinttop(){ return stack.peek(); }
// 查询最小值 publicintmin(){ return min; } }
上述代码在 LeetCode 的执行结果如下:
从结果可以看出,使用 Java 中自带的栈的性能不如自定义数组的栈,但代码还是通过了测试。这种实现方式的优点就是代码比较简单,可以利用了 Java 自身的 API 来完成了最小值的查找。
这种实现代码的方式(使用 Java API),在刷题或者实际面试中如果没有特殊说明是可以直接用的。
总结
本文我们通过两种方式:自定义数组栈和 Java API 中的 Stack 来实现了栈中最小值的功能,保证了在调用栈的 min、push 及 pop 方法时的时间复杂度都是 O(1)。两种实现方式的代码虽然略不相同,但实现思路都是一样的,都是在元素入栈时判断当前元素是否小于最小元素,如果小于最小元素则先将原最小值入栈,再将当前最小元素入栈,这样当调用 pop 方法时,即使移除的是最小值,只需要将下一个元素取出即为新的最小值了,这样就可以实现调用 min、push 及 pop 方法时的时间复杂度都是 O(1) 了。
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。