牛客网 包含min函数的栈

题目描述:

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

思路:

1、创建两个栈,一个存放所有的数据,一个存放每次比较的最小的数据;

2、来第一个数据,直接进栈data_stack和min_stack;

3、之后每次来一个数据,都将之前min_stack的栈顶元素和新的数据进行比较,将最小的元素进栈min_stack;

4、每次都把最小元素压入min_stack,那么就能保证min_stack的栈顶一直都是最小元素,当最小元素从data_stack中被弹出后,同时弹出min_stack中的栈顶元素,那么min_stack中的新栈顶元素就是下一个最小值。


代码:

import java.util.Stack;

public class Solution {
    Stack<Integer> data_stack=new Stack<Integer>();//存放所有的数据
    Stack<Integer> min_stack=new Stack<Integer>();//存放每次比较最小的数据
    public void push(int node) {
        data_stack.push(node);//data_stack是存放所有的数据的,所以有数据就要进栈
        if(min_stack.empty()||node<min_stack.peek()){//如果min_stack为空或者node的值小于min_stack的栈顶元素,则直接进栈
            min_stack.push(node);
        }else{
            min_stack.push(min_stack.peek());
        }
    }
    
    public void pop() {
        data_stack.pop();
        min_stack.pop();
    }
    
    public int top() {
        if(min_stack.empty()){
            return 0;
        }
        return min_stack.peek();
    }
    
    public int min() {
        if(min_stack.empty()){
            return 0;
        }
        return min_stack.peek();
    }
}

栈的总结:

1、判断栈是否为空:

    stack.empty();

2、查看栈顶元素,但不从栈中删除:

    stack.peek();

3、返回对象在栈中的位置,以1位基数:

    stack.search(element);

4、将对象压入栈顶部:

    stack.push();

5、将对象从栈中弹出,返回该对象:

    stack.pop();

猜你喜欢

转载自blog.csdn.net/LuckyMeizai/article/details/80459477
今日推荐