剑指Offer——包含min函数的栈

1、题目描述

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

2、代码实现

package com.baozi.offer;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Stack;

/**
* @author BaoZi
* @create 2019-07-12-15:23
*/
public class Offer16 {
Stack<Integer> stack = new Stack<>();
ArrayList<Integer> list = new ArrayList<>();

public void push(int node) {
stack.push(node);
list.add(node);
//经过这个工具函数之后的list中元素都是从小打到排序的
Collections.sort(list);
}
//在进行删除操作的时候一定要先把list链表中的对应元素删除
public void pop() {
if (!stack.isEmpty()) {
list.remove(stack.peek());
Collections.sort(list);
stack.pop();
}
}

public int top() {
if (!stack.isEmpty()) {
return stack.peek();
}
return 0;
}
//因为链表中存放的元素和栈中的元素是一样的,所以去最小元素就直接拿已经有序的链表中的元素就好了
public int min() {
if (list != null) {
return list.get(0);
}
return 0;
}
}
posted @ 2019-07-12 15:52  包子的百草园  阅读(132)  评论(0编辑  收藏  举报