Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Min Stack ใน Python

ที่นี่เราจะดูวิธีสร้างสแต็กที่สามารถทำ push, pop, top และดึงค่าต่ำสุดได้ในเวลาคงที่ ฟังก์ชันจะเป็น push(x), pop(), top() และ getMin()

วิธีการแก้ปัญหา

  • เริ่มต้นสแต็กด้วยค่าต่ำสุดเป็น infinity
  • สำหรับการ push(x):
    • ถ้า x < min ให้อัปเดต min := x
    • push x เข้าสแต็ก
  • สำหรับการ pop():
    • t := องค์ประกอบบนสุด
    • ลบ t ออกจากสแต็ก
    • ถ้า t เป็น min ให้ min := องค์ประกอบบนสุดของสแต็ก
  • สำหรับการ top():
    • คืนค่าองค์ประกอบบนสุดโดยตรง
  • สำหรับการ getMin():
    • คืนค่าองค์ประกอบต่ำสุด

ตัวอย่างโค้ด

class MinStack(object):
    min = float('inf')
    def __init__(self):
        self.min = float('inf')
        self.stack = []
    def push(self, x):
        if x <= self.min:
            self.stack.append(self.min)
            self.min = x
        self.stack.append(x)
    def pop(self):
        t = self.stack[-1]
        self.stack.pop()
        if self.min == t:
            self.min = self.stack[-1]
            self.stack.pop()
    def top(self):
        return self.stack[-1]
    def getMin(self):
        return self.min

m = MinStack()
m.push(-2)
m.push(0)
m.push(-3)
print(m.getMin())
m.pop()
print(m.top())
print(m.getMin())

อินพุต

m = MinStack() m.push(-2) m.push(0) m.push(-3) print(m.getMin()) m.pop() print(m.top()) print(m.getMin())

เอาต์พุต

-3 0 -2