转自:https://blog.youkuaiyun.com/u010452388/article/details/81665826
完整题目:
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
【要求】
1. pop(弹栈)、push(入栈)、getMin操作的时间复杂度都是O(1)
2. 设计的栈类型可以使用现成的栈结构
实现思路
1.首先准备两个栈,一个是data栈,一个是min栈
2.第一数入栈的时候,data栈和min栈都插入这个数,后面再有数入栈的时候,data栈正常入栈,入min栈的时候,拿当前数与min栈栈顶的数比较,较小的数入min栈
3.弹栈的时候,data栈和min栈同时弹出栈顶数据
4.通过getMin获取最小值的时候,直接返回min栈的栈顶数即可(但是不弹出)
图解流程
首先准备两个空栈,data栈和min栈,入第一个数的时候,两个数同时入栈,如下图:
入第二个数6的时候,data栈正常入栈,但是,6入min栈之前,先与min栈的栈顶数进行比较,哪个数小就入到min栈,比较后发现,min栈原来的数5小,那么直接入5
入第三个数3的时候,data栈正常入栈,3与min栈栈顶的5进行比较,3较小,则min栈入3