zoukankan      html  css  js  c++  java
  • 包含min函数的栈

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

    import java.util.Stack;
    
    public class Solution {
    
        
        public void push(int node) {
            
        }
        
        public void pop() {
            
        }
        
        public int top() {
            
        }
        
        public int min() {
            
        }
    }

    idea:本题需要重新自定义push,pop,top,min方法,使得能够通过min方法随时得到当前栈中的最小元素。

    首先如果我们不考虑这是一个栈,而是一个普通的数组,那么就很简单,我们只需要定义一个数minNumber存储当前数组中的最小值。遍历整个数组,如果当前数小于最小值min,那么就更新最小值,否则就继续遍历。

    那么我们能不能将这种思想转换到栈中呢?首先我们必须清楚栈的特点:“先进后出,后进先出”。如果我们依次将栈中的元素弹出来和minNumber比较,如果小于最小值minNumber,就更新minNumber,否则就继续弹出。这种思想事实上是可以借鉴的。但是有个问题是当我们把最小值找到了,但是这个时候栈也空了。所以我们就需要一个辅助栈来暂时存储弹出来的数,将栈里面的数弹空了,最小值也找到了,那么就将辅助栈里面的数又重新压入原来的栈中。这样两次出栈和入栈的过程也不会改变原来栈中的顺序。

    有了思路那么那么我们就可以开始动笔写程序了。

    import java.util.Stack;
    
    public class Solution {
        
          //创建两个栈对象,一个用于存储原栈数据,一个用于暂时辅助存储数据
          Stack<Integer> stack = new Stack<Integer>();
          Stack<Integer> subStack = new Stack<Integer>();
    
        
        public void push(int node) {
            stack.push(node);
            
        }
        
        //pop操返回栈顶元素的同时会remove栈顶元素
        public void pop() {
            int p = stack.pop();
            
        }
        
        //这里返回栈的顶部元素,但是不会remove栈顶元素
        public int top() {
            int topNumber = stack.peek();
            return topNumber;
            
        }
        
        public int min() {
            int minNumber = Integer.MAX_VALUE;
            //依次取出栈里面的数直到栈为空
            while(stack.isEmpty() != true){
                //得到栈顶元素
                int number = stack.pop();
                if(minNumber > number){
                    minNumber = number;
                }
                //弹出一个,压入一个
                subStack.push(number);
            }
            //最后将辅助栈中的元素再重新压入原来的栈里
            while(subStack.isEmpty() != true){
                stack.push(subStack.pop())
            }
            
            return minNumber;
            
        }
    }

    这次采用的是文本编辑器写代码,出了很多的小问题,比如top方法没有写返回值,创建栈的整数对象的时候没有写integer,并且后面没有加括号,其次有的地方还忘记写分号了,看来没有了ide,写代码真的是漏洞百出啊,以后一定要加强用文本编辑器写代码,扎实功底。

  • 相关阅读:
    Django框架
    Django框架
    Django框架
    Django框架
    Bootstrap框架
    前端之jQuery
    前端之BOM和DOM
    Flask框架配置管理
    lement-ui、接口、restful规范、drf、跨域问题
    Vue项目入口与小知识总结
  • 原文地址:https://www.cnblogs.com/flyingcr/p/10428302.html
Copyright © 2011-2022 走看看