企业网站的开发建设方案怎么写/自动seo系统
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
用一个辅助栈 stack2 ,stack2 栈顶存储的是实际栈 stack1 的最小值 min,如果是取最小值的话,就读出 stack2 的栈顶。对于入栈操作,如果要入栈的值 x ,小于等于当前 stack2 的最小值,那么同时也将 x 压入stack2 中。
-
第一个需要注意的地方是,上面那个小于等于
-
需要注意的是,Integer 的判等需要用 equals 方法,因为Integer的equals重写过,比较的是内部value的值, ==如果在[-128,127]会被cache缓存,超过这个范围则比较的是对象是否相同。
-
时间复杂度,符合题目要求都是O(1)
-
空间复杂度O(n)
class MinStack {Stack<Integer> stack1, stack2;/** initialize your data structure here. */public MinStack() {stack1 = new Stack<>();stack2 = new Stack<>();}public void push(int x) {stack1.push(x);if (stack2.isEmpty() || stack2.peek() >= x) { // 大佬的等号用得妙呀,可以避免最小值被欸重复弹出stack2.push(x);}}public void pop() {if (stack1.pop().equals(stack2.peek())) { // 这里如果用 == 将无法通过stack2.pop();}}public int top() {return stack1.peek();}public int min() {return stack2.peek();}
}