剑指offer-包含min函数的栈-栈和队列-python

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack = []
        self.minstack = []
    def push(self, node):
        # write code here
        if not self.minstack or self.minstack[-1] >= node:
            self.minstack.append(node)
        self.stack.append(node)
    def pop(self):
        # write code here
        if self.stack[-1]  == self.minstack[-1]:
            self.minstack.pop()
        self.stack.pop()
    def top(self):
        # write code here
        return self.stack[-1]
    def min(self):
        # write code here
        return self.minstack[-1]

原文地址:https://www.cnblogs.com/ansang/p/11993965.html

时间: 2024-07-30 09:57:17

剑指offer-包含min函数的栈-栈和队列-python的相关文章

剑指offer包含min函数的栈python

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路 定义两个栈,一个保存正常的数据,另一个用来记录当前的最小元素 代码 # -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] self.cur = -1 def push(self, node): # write code here if self.c

剑指offer--27.包含min函数的栈

时间限制:1秒 空间限制:32768K 热度指数:252822 本题知识点: 栈 算法知识视频讲解 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). class Solution { public: void push(int value) { data.push(value); if(minnum.empty()) minnum.push(value); else if(minnum.top()<value) minnum.pus

剑指Offer19 包含min函数的栈

1 /************************************************************************* 2 > File Name: 19_MinInStack.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月30日 星期二 19时29分48秒 6 **************************************

剑指:包含min函数的栈(min栈)

题目描述 设计一个支持 push,pop,top 等操作并且可以在 O(1) 时间内检索出最小元素的堆栈. push(x)–将元素x插入栈中 pop()–移除栈顶元素 top()–得到栈顶元素 getMin()–得到栈中最小元素 样例 MinStack minStack = new MinStack(); minStack.push(-1); minStack.push(3); minStack.push(-4); minStack.getMin(); --> Returns -4. minSt

《剑指Offer》附加题_用两个队列实现一个栈_C++版

在<剑指Offer>中,在栈和队列习题中,作者留下来一道题目供读者自己实现,即"用两个队列实现一个栈". 在计算机数据结构中,栈的特点是后进先出,即最后被压入(push)栈的元素会第一个被弹出(pop);队列的特点是先进先出,即第一个进入队列的元素将会被第一个弹出来.虽然栈和队列特点是针锋相对,但是两者却相互联系,可以互相转换. 在"用两个队列实现一个栈"问题中,我们用两个队列的压入和弹出来模拟栈的压入和弹出.我们通过画图的手段把抽象的问题形象化. 在上

剑指offer-包含min函数的栈20

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). class Solution: def __init__(self): self.stack=[] self.minj=0 def push(self, node): # write code here self.stack.append(node) if len(self.stack)==0: self.minj=node else: self.minj=min(self.stac

剑指offer---包含min函数的栈

class Solution { public: void push(int value) { stack1.push(value); } void pop() { stack1.pop(); } int top() { return stack1.top(); } int min() { //用一另一个栈存放读入的数据 int minNum=0; if(!stack1.empty()) { minNum =stack1.top(); stack2.push(stack1.top()); sta

《剑指offer》之用两个栈实现队列

题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:把stack1作为主栈,每次有新元素入队,先把stack1中所有元素pop到stack2中暂存,再push新元素到stack1,最后把stack2中元素pop到stack1. 代码实现: 1 import java.util.Stack; 2 3 public class Solution { 4 Stack<Integer> stack1 = new Stack<Integer&g

剑指offer:赋值运算符函数

对于定义一个赋值运算符函数时,需要注意一下几点: (1)函数的返回类型必须是一个引用,因为只有返回引用,才可以连续赋值 (2)传入的参数声明为常量引用,可以提高代码效率,同时赋值运算函数内不会改变传入的实例状态 (3)一定要记得释放实例自身已有的内存,否则程序容易出现内存泄露 (4)注意传入的参数和当前的实例是不是同一个实例,如果是同一个,则不用进行赋值操作,直接返回即可. 代码未写