包含min函数的栈(栈)

来源:互联网 发布:mysql日期排序 编辑:程序博客网 时间:2024/06/11 11:39

题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。


思路一:

*用一个数组data保存数据,用一个栈minStack保存依次入栈最小的数

*若data中依次存入:5,4,3,8,10,11,12,1

       则min依次入栈:5,4,3,3,3,3,3,1

*每次入栈的时候,如果入栈的元素 <= min中的栈顶元素,则入栈该元素,否则入栈当前的min。

import java.util.Arrays;import java.util.Stack;public class Solution {    private Stack<Integer> minStack = new Stack<>();    private Integer[] data = new Integer[10];    private int size;    private int min = Integer.MAX_VALUE;    //数组长度扩展    private void ensureCapacity(int size)    {        int len = data.length;        if (size > len)        {            int newLen = len * 2 + 1;            data = Arrays.copyOf(data, newLen);        }    }    public void push(int node) {        ensureCapacity(size + 1);        data[size++] = node;        if (node <= min)        {            minStack.push(node);            min = minStack.peek();        }        else            minStack.push(min);    }    public void pop() {        Integer top = top();        if (top != null) data[size - 1] = (Integer) null;        size--;        minStack.pop();        min = minStack.peek();    }    public int top() {        if (size > 0) return data[size - 1];        else return (Integer) null;    }    public int min() {        return min;    }}

思路二:

*用一个栈data保存数据,用另外一个栈min保存依次入栈最小的数

*若data中依次入栈:5,4,3,8,10,11,12,1

       则min依次入栈:5,4,3,no,no,no,no,1(no代表此次不入栈)

*每次入栈的时候,如果入栈的元素 <= min中的栈顶元素,则入栈,否则不入栈。

import java.util.Stack;public class Solution {    Stack<Integer> min = new Stack<>();    Stack<Integer> data = new Stack<>();    Integer temp = null;    public void push(int node) {        if (temp != null)        {            if (node <= temp)            {                temp = node;                min.push(node);            }            data.push(node);        }        else        {            temp = node;            data.push(node);            min.push(node);        }    }    public void pop() {        int num = data.pop();        int num2 = min.pop();        if (num != num2) min.push(num2);    }    public int top() {        int num = data.pop();        data.push(num);        return num;    }    public int min() {        int num = min.pop();        min.push(num);        return num;    }}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机解压包异常怎么办 电脑显示文件损坏怎么办 360解压坏了怎么办 dnf邮箱满了怎么办 origin会员过期存档怎么办 电脑文件夹删除不了怎么办 黑苹果内核错误怎么办 win10文件夹拒绝访问怎么办 苹果电脑没有系统了怎么办 黑苹果安装之后怎么办 笔记本cpu核显坏了怎么办 粘贴大量文件卡住怎么办 mx不能播放rv40怎么办 迷你世界联机卡怎么办 绝地求生被火瓶烧了怎么办 win8电脑太卡怎么办 win8关机没反应怎么办 arma3没子弹了怎么办 g350d柴油冻了怎么办 散热硅胶干了怎么办 电脑打不开pdf文件怎么办 文件变成快捷方式打不开怎么办 ai文件打不开了怎么办 电脑下载了病毒软件怎么办 打嗝停不下来怎么办 咳嗽停不下来怎么办 电动机停不下来怎么办 电脑所有程序都打不开怎么办 机顶盒画面卡顿怎么办 电脑画面卡顿怎么办 鞋舌头跑偏怎么办 球球大作战老卡怎么办 孩子被打却不敢还手怎么办? 自卫砍伤了人怎么办 系统还原节点黑屏了怎么办 我惹事了要被打怎么办 诛仙宠物太多怎么办 笔记本玩lolfps低怎么办 lol延迟有42怎么办 软件安装后黑屏怎么办 汽车脚垫翘边怎么办