看大神文章小结——微软面试2
2013-04-24 17:10
225 查看
大神 地址 :http://blog.csdn.net/v_JULY_v/article/details/6015165
2.设计包含min函数的栈(栈)
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
毫无疑问 难点就是 O(1)上面 既然 时间要求这么苛刻 。肯定是 牺牲空间换取时间了。一个栈应该没什么东西。大家都会写。主要是对 min 函数的维护。 一开始 我考虑了 用一个变量 记录最小值。显然 想当然了。 因为 这样 当 pop掉这个最小值的时候。就错误了。所以就需要更多的空间 记录着最小值。因为只栈结构。 保证了
出栈的顺序。 所以可以想到 无论 入栈多少。然后在出栈同样多的数字后 min是不变的。 考虑这个栈用数组实现。 那么 前N个数据的 的最小值 永远不会改变。这样 就可以用一个和栈一样长的数组维护最小值。
2.设计包含min函数的栈(栈)
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
毫无疑问 难点就是 O(1)上面 既然 时间要求这么苛刻 。肯定是 牺牲空间换取时间了。一个栈应该没什么东西。大家都会写。主要是对 min 函数的维护。 一开始 我考虑了 用一个变量 记录最小值。显然 想当然了。 因为 这样 当 pop掉这个最小值的时候。就错误了。所以就需要更多的空间 记录着最小值。因为只栈结构。 保证了
出栈的顺序。 所以可以想到 无论 入栈多少。然后在出栈同样多的数字后 min是不变的。 考虑这个栈用数组实现。 那么 前N个数据的 的最小值 永远不会改变。这样 就可以用一个和栈一样长的数组维护最小值。
public class Main { private List<Integer> stackList =new ArrayList<Integer>(); private List<Integer> minList =new ArrayList<Integer>(); private int index=-1; public void push(int num){ index++; stackList.add(index, num); if(index==0){ minList.add(index, num); }else{ int lastMin=minList.get(index-1); minList.add(index, Math.min(lastMin, num)); } } public int pop(){ if(index>=0){ int num=stackList.get(index); index--; return num; } return -1; } public int min(){ return minList.get(index); } public boolean hasDate(){ return index>=0; } public static void main(String[] args) { Main main = new Main(); for(int i=0;i<10;i++){ int num=(int)(Math.random()*1000); main.push(num); } while(main.hasDate()){ System.out.println("min:"+main.min()+"data::"+main.pop()); } } }测试了一下 貌似没什么问题 解决
相关文章推荐
- 看大神文章小结——微软等面试 41-45
- 看大神文章小结——微软面试1
- 看大神文章小结——微软等面试10,11
- 看大神文章小结——微软等面试 16,17
- 看大神文章小结——微软等面试 35,36,37,38
- 看大神文章小结——微软面试5,6
- 看大神文章小结——微软面试3
- 看大神文章小结——微软等面试 31,32,33,34
- 看大神文章小结——微软等面试12,13,14
- 看大神文章小结——微软等面试7,8
- 看大神文章小结——微软等面试 27,28,29,30
- 看大神文章小结——微软等面试 18,19
- 看大神文章小结——微软等面试 39,40
- 看大神文章小结——微软面试4
- 看大神文章小结——微软等面试 20,21
- 看大神文章小结——微软等面试 23,24,25,26
- Const用法小结 [ C/C++ const], 好文章。const值得仔细推敲。对付面试很有用的
- 微软面试小结
- 关于精选微软等公司数据结构+算法面试100题的文章
- 微软面试100之9 判断整数序列是不是二元查找树的后序遍历结果