栈和队列问题:设计一个有 getMin 功能的栈
【 知识点 】 栈是一个先进后出(FILO-First In Last Out)的数据结构,队列是一种先进先出(FIFO-First In First Out)的数据结构。 【 题目 】 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。 【 要求 】 pop、push、getMin 操作的时间复杂度都是 O(1)。 设计的栈类型可以使用现成的栈结构。 【 难度 】 一星 【 解答 】 在设计上我们使用两个栈,一个栈用来保存当前栈中的元素,其功能和一个正常的栈没有区别,这个栈记为 stackData;另一个栈用于保存每一步的最小值,这个栈记 stackMin. 压入数据规则(push) 假设当前数据为 newNum, 先将其压入 stackData。然后判断 stackMin 是否为空: 1). 如果为空, 则 newNum 也压入 stackMin。 2). 如果不为空,则比较 newNum 和 stackMin 的栈顶元素哪一个更小:如果 newNum 更小或两者相等,则 newNum 也压入 stackMin; 如果 stackMin 的栈顶元素更小,则 stackMin 不压入任何内容。这样处理的结果,则是 stackMin 的栈顶元素一定为 stackMin 中的最小值。 弹出数据规则(pop) 先在