设计桟的 min、push以及pop的时间复杂度都是O(1) Java 实现
2015-03-05 12:05
543 查看
设计桟的min、push以及pop的时间复杂度都是O(1) ,这道题目是软件开发笔试中的高频题。
我阅读了一些大牛写的这个题目的答案。很多都是用c完成的,而且用了链式存储,或者多种结构体。
今天我就上一个我写的java版本(使用数组实现)。如有问题,欢迎指正。
我阅读了一些大牛写的这个题目的答案。很多都是用c完成的,而且用了链式存储,或者多种结构体。
今天我就上一个我写的java版本(使用数组实现)。如有问题,欢迎指正。
** * 要求push、pop、min都是o(1)时间内完成。 * * @author cui * */ public class MinStack { int initSize = 10; int inc = 5;// 增长因子 int[] values = new int[initSize];// 存放堆栈中的数据 int[] min = new int[initSize];// 最小数的索引,也可以用一个堆栈存放。 int size;// 栈中的有效元素个数 /** * 扩充数组 */ public void expand() { int[] newValues = new int[values.length + inc]; System.arraycopy(values, 0, newValues, 0, values.length); values = newValues; newValues = new int[min.length + inc]; System.arraycopy(min, 0, newValues, 0, min.length); min = newValues; } /** * 将 value 压入栈顶 * * @param value */ public void push(int value) { if (size > values.length - 1 ) { expand(); } values[size] = value; if (size == 0) { min[size] = size; } else { if (value < values[min[size - 1]]) {// 每次将最小值的index存到min数组中 min[size] = size; } else { min[size] = min[size - 1]; } } ++size; } /** * 弹出栈顶元素 * * @return */ public Integer pop() { if (size <= 0) { return null; } return values[--size]; } /** * 返回当前栈中的最小值 * * @return */ public Integer min() { return size > 0 ? values[min[size - 1]] : null; } @Override public String toString() { return "MinStack [values=" + Arrays.toString(values) + ", min=" + Arrays.toString(min) + "]"; } /** * 测试 * * @param args */ public static void main(String[] args) { MinStack min = new MinStack(); min.push(-1); min.push(-2); min.push(-3); min.push(0); min.push(-10); min.push(-1); min.push(-2); min.push(-3); min.push(0); min.push(-10); min.push(-20); min.push(-20); min.pop(); min.pop(); min.pop(); System.out.println(min.min()); } }
相关文章推荐
- 设计一个堆栈,函数min、push 以及pop 的时间复杂度都是O(1)
- 设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1)
- 每天学习一算法系列(3)--设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 设计桟的min、push以及pop的时间复杂度都是O(1)
- 每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)
- 练习系列 - 3、设计包含min函数的栈,push、pop、min的时间复杂度都为O(1),仿照APR_RING采用宏实现
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
- 【Java】设计一个栈,并且push,pop和min三个方法的时间复杂度必须为O(1)
- 【面试题】实现一个栈要求Push,Pop,Min(返回栈中最小值的操作)的时间复杂度为O(1)
- 实现一个栈,Push,Pop,Min,并且保证时间复杂度为O(1)
- 实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)
- 设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)
- ~实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)~
- 面试题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素,要求函数min,push及pop的时间复杂度都是O(1)
- 实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈,要求Push/Pop/Min(返回最小值)的时间复杂度为O(1)
- 【数据结构】实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个最小栈的push(int x),pop(),top(),min()方法,要求都是常量时间