• 一周刷完剑指offer-20-包含min函数的栈


    包含min函数的栈

    1. 题目描述

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

    2. 示例

    3. 解题思路

    思路:利用一个辅助栈来存放最小值

    栈  3,4,2,5,1
    
    辅助栈 3,3,2,2,1
    

    每入栈一次,就与辅助栈顶比较大小,如果小就入栈,如果大就入栈当前的辅助栈顶

    当出栈时,辅助栈也要出栈

    这种做法可以保证辅助栈顶一定都当前栈的最小值

    4. Java实现

    import java.util.Stack;
     
    public class Solution {
     
        private Stack<Integer> dataStack = new Stack();
        private Stack<Integer> minStack = new Stack();
        
        public void push(int node) {
            dataStack.push(node);
            if (minStack.isEmpty() || min() > node){ // 如果为空,则之间push进去,如果最小栈的最小值都比node大,也把node值push
                minStack.push(node); 
            }else{
                minStack.push(min());
            }
        }
        
        public void pop() {
            dataStack.pop();
            minStack.pop();
        }
        
        public int top() {
            return dataStack.peek();
        }
        
        public int min() {
            return minStack.peek();
        }
    }
    

    5. Python实现

    # -*- coding:utf-8 -*-
    class Solution:
        def __init__(self): #使用两个栈来实现,两个栈的大小是相同的
            self.stack = []
            self.minStack = []
        
        def push(self, node):
            # write code here
            self.stack.append(node)
            if not self.minStack or self.min() > node: # 将最小值增加到minStack中
                self.minStack.append(node)
            else:
                self.minStack.append(self.min())
            
        def pop(self):
            # write code here
            if self.stack and self.minStack:
                self.stack.pop()
                self.minStack.pop()
            else:
                return None 
            
        def top(self):
            # write code here
            return self.stack[-1]
        def min(self):
            # write code here
            return self.minStack[-1]
    

    如果您觉得本文有用,请点个“在看”

    image.png

  • 相关阅读:
    js计算器
    还差得远
    首个项目结束
    Web前端开发规范文档你需要知道的事
    CSS需要经过多次练习和积累才能掌握
    在Javascript中闭包(Closure)
    Web前端和网站美工
    IE中的条件注释
    计算机类期刊投稿
    忙就一个字
  • 原文地址:https://www.cnblogs.com/junge-mike/p/13687357.html
Copyright © 2020-2023  润新知