zoukankan      html  css  js  c++  java
  • 算法总结之 栈和队列

    实现一个特殊的栈,在实现栈的基本功能基础上,再实现返回栈中最小元素的操作。

    思路: 

     在设计上 使用两个栈,一个用来保存当前栈中的元素,其功能和一个正常的栈没有区别。记为 stackData

    另一个栈用来保存每一步的最小值,这个栈记为 stakMin

    压入数据规则:

     假设当前数据为 newNum 先将其压入 stackData  然后判断stackMin是否为空

         如果空  newNum也压入stackMin

        如果不空 比较newNum和stackMin 的栈顶元素哪个更小

        如果 newNum <= stackMin,peek() 则newNum 也压入stackMin

        如果newNum > stackMin.peek() 则stackMin不压入任何内容

    弹出数据规则

      先在stackData 弹出栈顶元素,记value  然后比较当前stackMin 的栈顶元素和value 哪个更小

    当value等于stackMin的栈顶元素时,stackMin弹出栈顶元素, 

    当value大于stackMin的栈顶元素时, stackMin不弹出元素 返回value

    查询当前栈中的最小值操作

      stackMin中始终记录着stackData中的最小,所以stackMin的栈顶元素市中市当前stackData中的最小值

    package TT;
    
    import java.util.Stack;
    
    public class Test120 {
    
    public class Mystack1{
        
     private Stack<Integer> stackData;
     private Stack<Integer> stackMin;
     
     public Mystack1(){
         this.stackData = new Stack<Integer>();
         this.stackMin = new  Stack<Integer>();
         
     }
        
     public  void push(int newNum){
         
         if(this.stackMin.isEmpty()){
             this.stackMin.push(newNum);
         }else if(newNum <= this.getmin()){
             this.stackMin.push(newNum);
         }
         this.stackData.push(newNum);
         
     }
    public int pop(){
        
        if(this.stackData.isEmpty()){
            throw new RuntimeException("your stack is empty");
        }
        int value = this.stackData.pop();
        if(value == this.getmin()){
            this.stackMin.pop();
        }
        return value;
    }    
        
        public int getmin(){
            if(this.stackMin.isEmpty()){
                throw new RuntimeException("your stack is empty");
            }
          return this.stackMin.peek();
        }
    }
    }
  • 相关阅读:
    第二个冲刺 6.3.4.学术诚信与职业道德
    第二个冲刺 Sprint
    css之清除浮动
    style和getComputedStyle(ff)和currentStyle
    php 中间件
    Vue 和 angular
    img 分区响应图
    PHP composer
    php实现文件上传,下载的常见文件配置
    php 命名空间
  • 原文地址:https://www.cnblogs.com/toov5/p/7510225.html
Copyright © 2011-2022 走看看