155. 最小栈
1. 题目
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack()初始化堆栈对象。void push(int val)将元素val推入堆栈。void pop()删除堆栈顶部的元素。int top()获取堆栈顶部的元素。int getMin()获取堆栈中的最小元素。
示例 1:
1  | 输入:  | 
提示:
-2^31 <= val <= 2^31 - 1pop、top和getMin操作总是在 非空栈 上调用push,pop,top, andgetMin最多被调用3 * 10^4次
2. 思路
- 已知题目要求使用常量时间来检索到栈内最小的元素值,同时已知栈最多被调用 
3 * 10 ^ 4次 - 初始化
stack数组和minStack数组,其中minStack数组用于记录递减的数值 - 当执行
push命令时,当minStack数组为空或当前推入栈的值小于等于minStack栈顶元素时。将值对应写入至minStack中 - 当执行
pop命令时,如果推出的值与minStack的栈顶元素相同,同步推出minStack的栈顶元素 - 当执行
getMin命令时,只需要推出实时维护好的minStack栈顶元素 - 由于栈的特性是先进先出,得益于该机制,可以使得
minStack只需要关注递减序列即可 
3. 代码
1  | class MinStack {  | 
4. 复杂度
- 时间复杂度:O(1)
 - 空间复杂度:O(n)
 
