获取栈中的最小值

题目描述:

  • 要求设计一种算法可以获取栈中的最小值
  • 必须实现原有的弹出压入操作
  • 方法的时间复杂度需要O(1)
    实现思路:

使用两个栈来实现获取最小值的操作,代码如下:

package com.mfq.stack;

import java.util.Random;
import java.util.Stack;


public class GetMinStack {
    private Stack stackData;
    private Stack stackMin;

    public GetMinStack() {
        this.stackData = new Stack<>();
        this.stackMin = new Stack<>();
    }

    public void push(int data) {
        stackData.push(data);
        if (stackMin.isEmpty()) {
            stackMin.push(data);
            stackData.push(data);
        } else {
            if (stackMin.peek() > data) {
                stackMin.push(data);
            }
        }

    }

    public int pop() {
        int data = stackData.pop();
        if (data == stackMin.peek()) {
            stackMin.pop();
        }
        return data;

    }

    public int getMin() {
        return stackMin.pop();
    }


    public static void main(String[] args) {
        GetMinStack getMinStack = new GetMinStack();
        Random random = new Random();
        for (int i = 0; i < 10; i++) {
            int data = (int) (random.nextDouble() * 10);
            getMinStack.push(data);
            System.out.print(data + " ");

        }
        System.out.println();
        System.out.println(getMinStack.getMin());

    }
}

你可能感兴趣的:(算法)