题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路一:
*用一个s1保存数据,用一个栈s2保存依次入栈最小的数
*若s1中依次存入:5,4,3,8,10,11,12,1
则s2依次入栈:5,4,3,3,3,3,3,1
*每次入栈的时候,如果入栈的元素 <= min中的栈顶元素,则入栈该元素,否则入栈当前的min。
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.s1=[]
self.s2=[]
def push(self, node):
# write code here
self.s1.append(node)//栈1保存数据
if not self.s2 ://栈2保存当前最小的值
self.s2.append(node)
else:
if node<self.s2[-1]:
self.s2.append(node)
else:
self.s2.append(self.s2[-1])
def pop(self):
# write code here
self.s1.pop()
self.s2.pop()
def top(self)://栈顶
# write code here
return self.s1[-1]
def min(self):
# write code here
return self.s2[-1]
import java.util.Stack;
public class Solution {
Stack<Integer> datastack=new Stack<>();
Stack<Integer> minstack=new Stack<>();
public void push(int node) {
datastack.push(node);
if(minstack.isEmpty()) minstack.push(node);
else{
if(node<minstack.peek()) minstack.push(node);
else minstack.push(minstack.peek());
}
}
public void pop() {
minstack.pop();
datastack.pop();
}
public int top() {
return datastack.peek();
}
public int min() {
return minstack.peek();
}
}
区别:python取栈顶元素用索引s2[-1];java用 peek()