您的位置:首页 > Web前端

剑指Offer 21:包含min函数的栈

2017-04-04 15:33 344 查看
题目:定义栈的数据结构,请在该类型中实现一个能够得到站的最小元素的min函数。在该栈中,调用min、push以及pop的时间复杂度都是O(1)。

题目分析

我们要实现的两种效果是:

数据结构仍然是栈的性质(后进先出),同时局部依次取出最小的功能。

处理方法:最小元素放到另外一个辅助栈中。

1 数据栈正常压入弹出数据,维持栈的LIFO性质;

2 辅助栈用来保持最小的数据栈数据在栈顶。(min栈每次插入数据都与min栈栈顶元素比较,如果小于栈顶元素(即新最小值)压入新数据,否则压入原来的min栈栈顶元素)—与数据栈元素个数对应,显示当前数据的最小值。





Java实现

import java.util.EmptyStackException;
import java.util.Stack;

public class Solution {
Stack<Integer> data = new Stack<>();
Stack<Integer> min = new Stack<>();

public void push(int node) {
data.push(node);

if (min.empty()) { // 考虑min栈空情况
min.push(node);
} else {
int num = min.peek();
if (node < num) {
min.push(node);
} else {
min.push(num);
}
}
}

public void pop() {
if (data.empty())
throw new EmptyStackException();
data.pop();
min.pop();

}

public int top() {
if (data.empty())
throw new EmptyStackException();

return data.peek();
}

public int min() {
if (min.empty())
throw new EmptyStackException();

return min.peek();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: