0
点赞
收藏
分享

微信扫一扫

面试题30:包含min函数的栈

DYBOY 2023-03-07 阅读 59


题目:

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度是O(1)。

分析:

我们需要一个辅助栈,每次向栈中放数据的时候,同时向辅助栈中放当前栈中的min元素,同时,在弹出栈的时候,也在辅助栈中将当前的min元素弹出,这样可以获取到弹出栈后的次小元素。

解法:

package com.wsy;

import java.util.Stack;

class StackWithMin extends Stack {
private Stack<Integer> stack;
private Stack<Integer> stackWithMin;

public StackWithMin() {
stack = new Stack();
stackWithMin = new Stack();
}

public Object min() {
return stackWithMin.peek();
}

@Override
public Object push(Object item) {
if (stackWithMin.isEmpty() || (Integer) item < stackWithMin.peek()) {
stackWithMin.push((Integer) item);
} else {
stackWithMin.push(stackWithMin.peek());
}
return stack.push((Integer) item);
}

@Override
public synchronized Object pop() {
stackWithMin.pop();
return stack.pop();
}
}

public class Main {
public static void main(String[] args) {
StackWithMin stackWithMin = new StackWithMin();
stackWithMin.push(3);
System.out.println(stackWithMin.min());
stackWithMin.push(4);
System.out.println(stackWithMin.min());
stackWithMin.push(2);
System.out.println(stackWithMin.min());
stackWithMin.push(1);
System.out.println(stackWithMin.min());
stackWithMin.pop();
System.out.println(stackWithMin.min());
stackWithMin.pop();
System.out.println(stackWithMin.min());
stackWithMin.push(0);
System.out.println(stackWithMin.min());
}
}

 

举报

相关推荐

0 条评论