面试题---push,pop,min复杂度都为常数的stack
来源:互联网 发布:企业数据分析 编辑:程序博客网 时间:2024/05/15 23:48
面试题 -- 设计包含min函数的栈
要求:
min函数用来得到栈的最小元素
函数min,push,pop时间复杂度都是O(1)
难点在于如何保存min值,并且当min值出栈后,如何快速得到新的min值,用一个包含当前元素值和前后最小元素值的复合结构可以解决
直接上代码
public class MinStack<T extends Comparable> { int size; int top = 0; Node<T>[] arr; public MinStack(int size) { this.size = size; arr = new Node[size]; } public void push(T t) { if (top + 1 == size) throw new IllegalArgumentException("it's full"); Node<T> n = new Node<T>(t); if (top != 0) { if (t.compareTo(arr[top - 1].getMin()) > 0) n.setMin(arr[top - 1].getMin()); } arr[top++] = n; } public T pop() { if (top == 0) throw new IllegalArgumentException("it's empty"); return arr[--top].getT(); } public T min() { return top == 0 ? null : arr[top - 1].getMin(); } class Node<T> { private final T t; private T min; public Node(T t) { this.t = min = t; } public T getT() { return t; } public T getMin() { return min; } public void setMin(T min) { this.min = min; } }}测试一下
MinStack<Integer> msi = new MinStack<Integer>(10); msi.push(10); msi.push(11); msi.push(15); msi.push(2); msi.push(4); msi.push(1); msi.push(9); msi.push(8); msi.push(7); System.out.println(msi.min()); msi.pop(); msi.pop(); msi.pop(); msi.pop(); msi.pop(); msi.pop(); System.out.println(msi.min());
结果输出
110满足要求!
结合这个例子可以用一个图看到算法的过程
- 面试题---push,pop,min复杂度都为常数的stack
- 【面试题】实现一个栈要求Push,Pop,Min(返回栈中最小值的操作)的时间复杂度为O(1)
- 面试题(实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))
- 【面试题】实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
- push, pop, min 都为O(1)的栈
- 设计一个栈,除了pop push 还支持Min,时间复杂度都为o(1);
- 【栈队列】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 栈--实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 模拟实现一个Stack 要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- JSP原理笔记(三)
- 高级语言程序设计第一次上机报告
- UNIX/LINUX 平台可执行文件格式分析
- 简单JavaBean对象传递
- 如何激励同事编写单元测试
- 面试题---push,pop,min复杂度都为常数的stack
- linux 下 nginx phpcgi 的安装及配置
- [过游戏保护]之第一讲[背包、怪物、技能地面物品、任务、队友、装备、宠物、周围玩家]
- 开启Win8的无线路由器功能(Wifi共享)
- JavaScript跨域总结与解决办法
- KMP
- Python图表绘制:matplotlib绘图库入门
- jQuery 之路重走(2) jQuery对象和Dom对象
- 日期和String类型的工具类