zoukankan      html  css  js  c++  java
  • 剑指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 }
  • 相关阅读:
    关于Web应用开发流程的总结
    package.json的所有配置项及其用法,你都熟悉么
    curl 命令行工具的使用及命令参数说明
    pytest插件探索——hook开发
    浅探前端图片优化
    使用Flask构建一个Web应用
    原生的js实现jsonp的跨域封装
    CSS定位之BFC背后的神奇原理
    webview错误
    Android 中的webview
  • 原文地址:https://www.cnblogs.com/noaman/p/5440758.html
Copyright © 2011-2022 走看看