zoukankan      html  css  js  c++  java
  • 【LeetCode】面试题30. 包含min函数的栈

    题目:

    思路:

    空间换时间,关键在于pop操作后怎么保证min的正确性。因为要求min、push、pop的时间复杂度都是O(1),所以都不能进行排序操作。利用辅助空间,记录当前栈顶的最小值。一种是辅助空间和栈相同大小,比如栈内元素3、4、1、2、5,辅助空间为3、3、1、1、1,可以看到辅助空间有很多重复元素。可以简化一下辅助空间成3、1,注意相同最小元素要重复记录。

    代码:

    Python

    class MinStack(object):
    
        def __init__(self):
            """
            initialize your data structure here.
            """
            self.A = []
            self.B = []
    
        def push(self, x):
            """
            :type x: int
            :rtype: None
            """
            # self.A.append(x)
            # if not self.B or x < self.B[-1]:
            #     self.B.append(x)
            # else:
            #     self.B.append(self.B[-1])
            self.A.append(x)
            if not self.B or x<= self.B[-1]:
                self.B.append(x)
    
        def pop(self):
            """
            :rtype: None
            """
            # self.A.pop()
            # self.B.pop()
            if self.A.pop() == self.B[-1]:
                self.B.pop()
    
        def top(self):
            """
            :rtype: int
            """
            return self.A[-1]
    
        def min(self):
            """
            :rtype: int
            """
            return self.B[-1]
    
    # Your MinStack object will be instantiated and called as such:
    # obj = MinStack()
    # obj.push(x)
    # obj.pop()
    # param_3 = obj.top()
    # param_4 = obj.min()
    

    相关问题

  • 相关阅读:
    MS SQL Server中的CONVERT日期格式化大全
    简历
    Spring源码IOC部分容器简介【1】
    HadoopHDFS设计原理
    1.Linux系统简介
    3.大话C语言变量和数据类型
    2.C语言初探
    7.函数
    8.C语言预处理命令
    9.指针
  • 原文地址:https://www.cnblogs.com/cling-cling/p/13068249.html
Copyright © 2011-2022 走看看