题目
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。
示例 :
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
算法实现
public class MinStack
{
private Stack<int> Stack;
private Stack<int> Helper;
/** initialize your data structure here. */
public MinStack()
{
Stack = new Stack<int>();
Helper = new Stack<int>();
}
public void Push(int x)
{
if (Helper.Count == 0 || x <= Helper.Peek())
Helper.Push(x);
Stack.Push(x);
}
public void Pop()
{
int Top = Stack.Pop();
if ( Top== Helper.Peek())
Helper.Pop();
}
public int Top()
{
if(Stack.Count!=0)
return Stack.Peek();
throw new Exception("栈为空,操作无效");
}
public int GetMin()
{
if (Stack.Count != 0)
return Helper.Peek();
throw new Exception("栈为空,操作无效");
}
}
执行结果
执行结果 : 通过
执行用时 : 196 ms, 在所有 C# 提交中击败了93.28%的用户
内存消耗 : 34.2 MB, 在所有 C# 提交中击败了7.57%的用户
小的总结
了解了辅助栈与数据栈的设计方法,我的想法是数据栈与辅助栈数据不同步,还有数据同步的设计方法。
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。