算法思想一:定义辅助栈    解题思路:    1、要用两个栈,stack用于存储元素,mins用于存储最小值,每个位置的元素都有一个对应的最小值,也就是stack和mins的长度同步增加和减少;当需要得到目前栈中的最小值的时候,直接返回mins的栈顶元素即可 2、在mins栈中先添加一个最大值,因为以后每次添加都会和栈顶元素比较,如果栈为空的话代码要多写几行,先放一个最大值会方便一点      代码展示:    Python版本  # -*- coding:utf-8 -*-class Solution:    def __init__(self):        """        initialize your data structure here.        """        self.stack = []        self.mins = [float("inf")]            def push(self, node):        # write code here        self.stack.append(node)        self.mins.append(min(self.mins[-1], node))    def pop(self):        # write code here        self.stack.pop()        self.mins.pop()    def top(self):        # write code here        return self.stack[-1]    def min(self):        # write code here        return self.mins[-1]     复杂度分析:     时间复杂度O(1):栈的入、出时间均为O(1)    空间复杂度O(N):辅助栈空间,最差情况辅助站存储元素n个      算法思想二:基于链表       解题思路:   两个List一个存放存取的东西,一个存放截至到当前下标的最小值: 1.入栈一个数字就入栈一个当前位置最小值; 2.出栈一个数字就出栈尾位置最小值;           代码展示:     JAVA版本  import java.util.List;import java.util.ArrayList;public class Solution {    // 存储最小元素数组    Listmin = new ArrayList();    // 存储入栈数组    Listnum = new ArrayList();        public void push(int node) {        num.add(node);        // 判断最小值存入min数组        if(min.size() == 0 || node < min.get(min.size() - 1)) min.add(node);         else min.add(min.get(min.size() - 1)); }     public void pop() {         num.remove(num.size() - 1);         min.remove(min.size() - 1);     }     public int top() { // 获取最后一个元素         return num.get(num.size() - 1);     }     public int min() {         return min.get(min.size() - 1);     } }          复杂度分析:          时间复杂度O(1):链表的添加和删除时间为O(1)       空间复杂度O(N):辅助数组空间,最差情况下链表存储n个元素  
点赞 7
评论 0
全部评论

相关推荐

但我还是会继续秋招的
投递京东等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务