タイトル
問題解決のためのアイデア
補助スタックを使用する方法
- スタック、ストアデータを作成し、そして二次スタックを作成し、最小値を格納するために使用され
- 格納されたデータは、補助スタック未満の場合場合スタックデータストアに二次スタック一方
- 削除スタック要素は、スタックの最上位要素を支援するかどうかを検討する際に
- 、補助スタックトップの要素への復帰を最小時間を返します。
//C#语言实现
public class MinStack {
//创建数据栈
Stack<int> stack = new Stack<int>();
//创建辅助栈
Stack<int> min_stack = new Stack<int>();
/** initialize your data structure here. */
public MinStack() {
}
public void Push(int x) {
//当辅助栈元素为0
if (min_stack.Count == 0)
min_stack.Push(x);
else
{
//判断辅助栈栈顶元素与新加入元素的大小,如果小于辅助栈栈顶元素,加入辅助栈
if (min_stack.Peek() >= x)
min_stack.Push(x);
}
stack.Push(x);
}
public void Pop() {
//判断数据栈是否为空
if(stack.Count==0)
return;
//抛出数据栈栈顶元素,并将值赋给value
var value = stack.Pop();
//判断辅助栈栈顶元素与value是否相等
if (value == min_stack.Peek())
{
min_stack.Pop();
}
}
public int Top() {
return stack.Peek();
}
public int GetMin() {
return min_stack.Peek();
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.Push(x);
* obj.Pop();
* int param_3 = obj.Top();
* int param_4 = obj.GetMin();
*/
パイソン達成
#python实现
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.stack=[]
self.min_stack=[]
def push(self, x):
"""
:type x: int
:rtype: None
"""
self.stack.append(x)
if not self.min_stack or self.min_stack[-1]>=x:
self.min_stack.append(x)
def pop(self):
"""
:rtype: None
"""
if self.stack[-1]==self.min_stack[-1]:
self.min_stack.pop()
self.stack.pop()
def top(self):
"""
:rtype: int
"""
return self.stack[-1]
# 因为添加元素使用append的方法,最后进入list的在最右边,所以使用[-1]来访问
def getMin(self):
"""
:rtype: int
"""
return self.min_stack[-1]