码迷,mamicode.com
首页 > 编程语言 > 详细

08: 算法面试题2

时间:2019-03-01 09:24:45      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:end   __name__   show   click   lis   hid   图片   算法面试   strong   

1.1 python实现栈在 O(1) 时间内求 min

  1、题目说明

      1. python的栈是用list实现的,只要将list的append和pop封装到stack类中,即实现了压栈和退栈。

      2. 可以考虑利用两个栈来实现,一个栈保存所有数据,另一个保存对应状态下的最小值。

      3. 当新压栈的元素小于等于栈内最小的元素时,将新元素压入min_list,min_list栈顶元素即为所求。

      举例:依次压栈3,2,4,1:

        stack_list = [3, 2, 4, 1]

        min_list = [3, 2, 1]

技术图片
#! /usr/bin/env python
# -*- coding: utf-8 -*-

class stack(object):
    stack_list = []
    min_list = []
    min = None

    # 只有最小栈本身为空或者当前的值小于等于最小栈的栈顶时进行压栈
    def push(self, x):
        if not self.stack_list:  # 栈为空直接入栈,并将第一个值压入min_list
            self.min = x
            self.min_list.append(self.min)
            self.stack_list.append(x)
            return
        self.stack_list.append(x)
        if self.min >= x:  # 如果即将入栈元素小于当前最小元素,替换当前最小元素,并推入min_list
            self.min = x
            self.min_list.append(self.min)
        return

    # 弹出的数据等于最小栈顶的数据,最小栈的数据也要弹出
    def pop(self):
        pop_result = None
        if self.stack_list:
            pop_result = self.stack_list[-1]
            if self.stack_list.pop() == self.min:
                self.min_list.pop()
                if self.min_list:  # 取出 min_list 中最小元素作为新的最小元素
                    self.min = self.min_list[-1]
                else:
                    self.min = None
            return pop_result
        else:
            self.min = None
            return pop_result

    def print_stack(self):
        print(self.stack_list)
        return

    def get_min(self):
        return self.min

    
if __main__ == __name__:
    s = stack()
    s.push(3)
    s.push(2)
    s.push(4)
    s.push(1)
    print s.get_min() # 1
O(1)时间求栈min

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1111111111111111111111111111111

08: 算法面试题2

标签:end   __name__   show   click   lis   hid   图片   算法面试   strong   

原文地址:https://www.cnblogs.com/xiaonq/p/10454528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!