题目
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
题解
要求时间复杂度为O(1),意味着无论数据量为多少,min函数所需的时间都一样长。所以只能使用push和pop来决定min函数的输出。所以我们要定义一个List来存储min值,当push的时候判断是否应该添加元素到List,pop的时候判断是否要移除List的元素。
代码
using System.Collections.Generic;
class Solution
{
private int minNum=int.MaxValue;
Stack<int> stack=new Stack<int>();
List<int> list=new List<int>();
public void push(int node)
{
if(node<minNum)
{
minNum=node;
list.Add(node);
}
stack.Push(node);
}
public void pop()
{
if(minNum==top())
list.RemoveAt(list.Count-1);
stack.Pop();
minNum=list[list.Count-1];
}
public int top()
{
return stack.Peek();
}
public int min()
{
return minNum;
}
}