• 剑指offer系列18---顺时针打印矩阵


    【题目】定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。要求时间复杂度是O(1)。push pop min

    【思路】设计一个辅助栈,当新加入的原数据栈中的数小于辅助栈顶的数时就加入该数,大于就继续加入辅助栈顶的数。这样想取出最小数就直接取出辅助栈栈顶的数就可以。

         

     1 package com.exe4.offer;
     2 
     3 import java.util.Stack;
     4 
     5 /**
     6  * 18【题目】定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。要求时间复杂度是O(1)。
     7  * @author WGS
     8  *
     9  */
    10 public class MinInStack {
    11     
    12     Stack<Integer> dataStack=new Stack<Integer>();//数据栈
    13     Stack<Integer> assisstStack=new Stack<Integer>();//辅助栈
    14     
    15     //压入操作 保证最小的数放在栈顶,所以原数据栈压入一个数时,辅助栈要比较该数与上个数的大小,》则仍压入上个数
    16                                                            //小,则压入该数
    17     public void push(int node){
    18         dataStack.push(node);
    19         if(assisstStack.size()==0 || node<assisstStack.peek()){//新压入的数node小,就压入node
    20             assisstStack.push(node);
    21         }else{
    22             assisstStack.push(assisstStack.peek());//否则压入assisstStack中最小的数
    23         }
    24     }
    25     
    26     public void pop(){
    27         if(dataStack.size()>0 && assisstStack.size()>0){
    28             dataStack.pop();
    29             assisstStack.pop();
    30         }
    31     }
    32     //元数据栈顶值
    33     public int top(){
    34         if(dataStack.size()>0){
    35             return dataStack.peek();
    36         }
    37         return -1;
    38     }
    39     //辅助栈中最小值
    40     public int min(){
    41         if(dataStack.size()>0 && assisstStack.size()>0){
    42             return assisstStack.peek();
    43         }
    44         return -1;
    45         
    46     }
    47     public static void main(String[] args) {
    48         MinInStack minStack=new MinInStack();
    49         minStack.push(1);
    50         //minStack.pop();
    51         minStack.push(4);
    52         minStack.push(2);
    53         minStack.push(11);
    54         
    55         System.out.println(minStack.min());//1   辅助栈中最小值
    56         System.out.println(minStack.top());//11 元数据栈中栈顶值
    57 
    58     }
    59 
    60 }
  • 相关阅读:
    【软件构造】第二章第一节 软件生命周期和版本控制(配置管理)
    【软件构造】第三章第三节 抽象数据型(ADT)
    【软件构造】第三章第二节 设计规约
    用python实现两个文本合并
    用python实现哈希表
    想要搭建项目 首选从概念理解(一)
    javascript调用rest地址,获取页面值
    ArcGIS Runtime SDK for Mac OS X使用示例
    ArcGIS Server网络分析模块问题汇总
    (ArcGIS Flex API)根据地图数据构建动态树
  • 原文地址:https://www.cnblogs.com/noaman/p/5440758.html
Copyright © 2020-2023  润新知