zoukankan      html  css  js  c++  java
  • 【Java】 剑指offer(30) 包含min函数的栈

    本文参考自《剑指offer》一书,代码采用Java语言。

    更多:《剑指Offer》Java实现合集  

    题目 

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

    思路

      最初想法是定义一个成员变量min来存放最小元素,但是当最小元素弹出后,min就需要相应改变,所以必须把每次的最小值都存储下来。考虑采用一个辅助栈来存放最小值:

        栈  3,4,2,5,1

         辅助栈 3, 3,2,2,1
      (压入时,把每次的最小元素(之前最小元素与新入栈元素的较小值)保存起来放到辅助栈中)

    测试算例 

      1.新压入数字更大

      2.新压入数字最小

      3.弹出数字最小

      4.弹出数字不是最小

    Java代码

    //题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min
    //函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
    
    public class StackWithMin {
    	
    	Stack<Integer> stack_data=new Stack<Integer>();
    	Stack<Integer> stack_min=new Stack<Integer>();
    
        public void push(int node) {
            stack_data.push(node);
            if(stack_min.empty() || stack_min.peek()>node) {
            	stack_min.push(node);
            }else {
            	stack_min.push(stack_min.peek());
            }        
        }
        
        public void pop() {
        	if(!stack_data.empty()) {
                stack_data.pop();
                stack_min.pop();
        	}
        }    
     
        public int min() {
            return stack_min.peek();
        }
    }
    

      

    收获

      要学会这种情况下辅助栈的用法。

      

    更多:《剑指Offer》Java实现合集  

      

  • 相关阅读:
    axios基础用法
    CSS盒子模型
    前端跨域问题解决方案
    跨域-iframe
    swagger UI配置
    React安装和启动
    React 学习笔记
    redis学习笔记
    10个排序算法,待更新
    docker常用命令,持续更新。。。
  • 原文地址:https://www.cnblogs.com/yongh/p/9804934.html
Copyright © 2011-2022 走看看