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

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

    分析
    借用一个辅助栈来把每次的最小元素(之前的最小元素和新压入栈的元素两者的较小值)保存起来,这样在弹出最小元素之后,可以获得下一个最小元素。
    比如现在一次向栈中压入3, 4, 2, 1之后在连续两次弹出栈顶数字在压入0:

    步骤 操作 数据栈 辅助栈 最小值
    1 压入3 3 3 3
    2 压入4 3,4 3,3 3
    3 压入2 3,4,2 3,3,2 2
    4 压入1 3,4,2,1 3,3,2,1 1
    5 弹出 3,4,2 3,3,2 2
    6 弹出 3,4 3,3 3
    7 压入0 3,4,0 3,3,0 0

    代码:

    import java.util.Stack;
    
    public class Solution {
    
    	Stack dataStack = new Stack();
    	Stack minStack = new Stack();
    	
        public void push(int node) {
            dataStack.push(node);
            
            if(minStack.empty() || node < (int)minStack.peek()) {
            	minStack.push(node);
            }
            else {
            	minStack.push(top());
            }
        }
        
        public void pop() {
            if(!dataStack.isEmpty() && !minStack.isEmpty()) {
            	dataStack.pop();
            	minStack.pop();
            }
        }
        
        public int top() {
            return (int) minStack.peek();
        }
        
        public int min() {
        	
        	if(!dataStack.isEmpty() && !minStack.isEmpty()) {
        		return top();
        	}else {
        		return (Integer) null;
        	}
        }
        
        //测试代码
        public static void main(String[] args) {
        	Solution s = new Solution();
        	s.push(3);
        	System.out.println(s.min());
        	s.push(4);
        	System.out.println(s.min());
        	s.push(2);
        	System.out.println(s.min());
        	s.push(1);
        	System.out.println(s.min());
        	s.pop();
        	System.out.println(s.min());
        	s.pop();
        	System.out.println(s.min());
        	s.push(0);
        	System.out.println(s.min());
    	}
    }
    
  • 相关阅读:
    Vijos / 题库 / 输油管道问题
    军事机密(Secret.pas)
    1164 统计数字
    1142 奖学金 sort做法
    1487 大批整数排序
    1487 大批整数排序
    1545 最简单排序
    1470 数列处理
    1683 车厢重组
    spin.js无图片实现loading进度条,支持但非依赖jquery
  • 原文地址:https://www.cnblogs.com/lishanlei/p/10707726.html
Copyright © 2011-2022 走看看