【转】腾讯微信面试题--实现时间复杂度为O(1)的栈 2013-02-26
2013-03-29 08:50
357 查看
腾讯微信面试题--实现时间复杂度为O(1)的栈 2013-02-26
去面试微信实习,遇到这道算法题,当时被卡住,故今天把它写出来做下知识整理,
原题:实现一个栈,满足min() pop() push()方法的时间复杂度都为O(1).( min()返回栈中最小元素 )
思路1:用一个变量minItem记录栈中的最小值,在push()中 每次加入一个item就跟minItem对比,item更小,只item赋给minItem,然后再min() 中直接return minItem;
这种思路没考虑在pop()过程中,对minItem的影响,当栈顶元素是minItem,执行pop() 后minItem就不知道指向谁了,因为栈只记录最小值而起,至于最小值之前那些大小关系都没记录
正确思路:为了实现更低的时间复杂度,我们都会想到用空间去换时间,所有这里增加一个数组来nextMinItem[index] 元素大小关系。如果当前最小值是 对象 item1 当push进来的item2比 item1更小,且元素个数从原本的a增加到a+1 这时候我们用我们就应该把item2这个更小的item赋给minItem 然后用nextMinItem[a+1] = item1 来记录 item2 后面的次小值,这样一来当item2 这个栈顶被pop()掉的话,我们就可以minItem = nextMinItem[a+1],来恢复minItem。
?
运行结果:
?
文章来自:http://www.cnblogs.com/chenchuangfeng/archive/2013/03/29/2987337.html
去面试微信实习,遇到这道算法题,当时被卡住,故今天把它写出来做下知识整理,
原题:实现一个栈,满足min() pop() push()方法的时间复杂度都为O(1).( min()返回栈中最小元素 )
思路1:用一个变量minItem记录栈中的最小值,在push()中 每次加入一个item就跟minItem对比,item更小,只item赋给minItem,然后再min() 中直接return minItem;
这种思路没考虑在pop()过程中,对minItem的影响,当栈顶元素是minItem,执行pop() 后minItem就不知道指向谁了,因为栈只记录最小值而起,至于最小值之前那些大小关系都没记录
正确思路:为了实现更低的时间复杂度,我们都会想到用空间去换时间,所有这里增加一个数组来nextMinItem[index] 元素大小关系。如果当前最小值是 对象 item1 当push进来的item2比 item1更小,且元素个数从原本的a增加到a+1 这时候我们用我们就应该把item2这个更小的item赋给minItem 然后用nextMinItem[a+1] = item1 来记录 item2 后面的次小值,这样一来当item2 这个栈顶被pop()掉的话,我们就可以minItem = nextMinItem[a+1],来恢复minItem。
?
运行结果:
?
相关文章推荐
- 腾讯微信面试题--实现时间复杂度为O(1)的栈
- [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现
- 斐波那契数列算法的三种C#实现及时间复杂度分析
- 插入排序算法的java实现及时间复杂度分析
- java实现时间复杂度O(1)的LFU缓存
- 任意半径中值滤波(扩展至百分比滤波器)O(1)时间复杂度算法的原理、实现及效果。
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 写一个功能函数实现从数组中找出两个值相加等于某一个值,要求时间复杂度为 n;
- 找出满足a+b+c=n(n为正整数)的所有毕达哥拉斯元组(a,b,c)【python实现,时间复杂度优化】
- C/C+面试题一:找出字符串中出现最多的字符和次数,时间复杂度小于O(n^2)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 任意半径中值滤波(扩展至百分比滤波器)O(1)时间复杂度算法的原理、实现及效果
- jQuery实现腾讯时间轴事件过程特效
- 桟的min实现:O(1)时间复杂度
- PHP 定义栈结构,实现min函数,获取栈最小元素,要求时间复杂度为O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 每对顶点间的最短路径算法时间复杂度改进C++实现
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 【面试题】实现一个栈要求Push,Pop,Min(返回栈中最小值的操作)的时间复杂度为O(1)
- 实现一个数组中奇数和偶数分开,奇数在前部分,偶数在后部分 时间复杂度为O(n),空间复杂度为O(1)