w若熙ll 2021-11-13 16:03 采纳率: 66.7%
浏览 19
已结题

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

class MinStack(object):

#1构造函数
def __init__(self):
    self.stack1 = []
    self.stack2 = []


#1对栈进行push操作

def push(self, x):     
#首先如果将输入的元素直接放在栈1就行了。
    self.stack1.append(x)
#2对于栈2需要将待加入的数据进行比较,保证栈2顶端的数据是最小的。
    if not self.stack1:
        self.stack2.append(x)
#如果是最小的就直接放入,否则的话就舍弃。
    else:

        if self.stack2[-1] < x:
            self.stack2.append(self.stack2[-1])
        else :
            self.stack2.append(x)


#2对栈进行pop操作

def pop(self):
    self.stack1.pop()
    self.stack2.pop()
#直接对栈进行pop操作就可    
    # self.stack1.pop()
    # self.stack2.pop()

#获取栈顶元素
def top(self):
    if stack1 :
        return self.stack1[-1]
    else:
        return


def min(self):
    return self.stack2[-1]

class MinStack(object):

#1构造函数
def __init__(self):
    self.stack1 = []
    self.stack2 = []


#1对栈进行push操作

def push(self, x):     
#首先如果将输入的元素直接放在栈1就行了。
    self.stack1.append(x)
#2对于栈2需要将待加入的数据进行比较,保证栈2顶端的数据是最小的。
    if not self.stack1:
        self.stack2.append(x)
#如果是最小的就直接放入,否则的话就舍弃。
    else:

      **  if self.stack2[-1] < x:
            self.stack2.append(self.stack2[-1])**
        else :
            self.stack2.append(x)


#2对栈进行pop操作

def pop(self):
    self.stack1.pop()
    self.stack2.pop()
#直接对栈进行pop操作就可    
    # self.stack1.pop()
    # self.stack2.pop()

#获取栈顶元素
def top(self):
    if stack1 :
        return self.stack1[-1]
    else:
        return


def min(self):
    return self.stack2[-1]

用self.stack[-1]提示
IndexError: list index out of range
print(self.stack2[-1])
Line 20 in push (Solution.py)
Deserializer()._deserialize(json.dumps(p[0], separators=(",", ":")), "integer"))
Line 71 in helper_select_method (Solution.py)
ret.append(DriverSolution().helper_select_method(method, params[index], obj))
Line 121 in _driver (Solution.py)
_driver()
Line 130 in (Solution.py)
这种问题。

  • 写回答

1条回答 默认 最新

  • chuifengde 2021-11-13 17:09
    关注
    class MinStack(object):
        def __init__(self):
            self.stack1 = []
            self.stack2 = []
        
        #1对栈进行push操作
        def push(self, x):     
        #首先如果将输入的元素直接放在栈1就行了。
            self.stack1.append(x)
        #2对于栈2需要将待加入的数据进行比较,保证栈2顶端的数据是最小的。
            if not self.stack2:
                self.stack2.append(x)
        #如果是最小的就直接放入,否则的话就舍弃。
            else:
                if self.stack2[-1] > x:
                    self.stack2[0] = x
            return self.stack1
        #2对栈进行pop操作
        def pop(self):
            if self.stack1:
                self.stack1.pop()
                self.stack2[0] = sorted(self.stack1, reverse=True)[-1]
            return self.stack1
        #直接对栈进行pop操作就可    
            # self.stack1.pop()
            # self.stack2.pop()
        #获取栈顶元素
        def top(self):
            if self.stack1 :
                return self.stack1[-1]
            else:
                return None
        
        def min(self):
            return self.stack2[-1]
        def __repr__(self):
            return  '[{}]'.format(','.join(map(str, self.stack1)))
    
    a = MinStack()
    a.push(4)
    print(a)
    a.push(8)
    print(a, a.min())
    a.pop()
    print(a)
    print(a.min())
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月21日
  • 已采纳回答 11月13日
  • 创建了问题 11月13日

悬赏问题

  • ¥20 绿盟安全扫描--检测到目标站点存在javascript框架库漏洞
  • ¥30 Android STD快速启动
  • ¥15 如何使用simulink建立一个永磁同步直线电机模型?
  • ¥30 天体光谱图的的绘制并得到星表
  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包