由买买提看人间百态

topics

全部话题 - 话题: 出栈
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
d**s
发帖数: 98
1
非常规的解法:
http://blog.csdn.net/anchor89/article/details/6055412
经典面试题:设计包含min函数的栈,O(1)空间实现方法
分类: 数据结构和算法 2010-12-04 22:20 2102人阅读 评论(10) 收藏 举报
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数
min、push以及pop的时间复杂度都是O(1)。
注:这是06年一道Google的面试题.
先来说个常规解和他的一个优化,常规解的时间复杂度符合要求,但需要线性的额外空间.
常规解(参考 http://zhedahht.blog.163.com/blog/static/25411174200712895228171/):
除了题目要求的栈之外新开一个栈,用来记录最小值,每当在原栈中push数据后,与最小
值栈中的栈顶元素比较,如果新值较小,则在最小值栈中push新值;否则再次push栈顶元
素.
pop的时候,只要将最小值栈也pop一下就行了.
这样,min函数只需要返回最小值栈的栈顶元素即可.
常规解空间上的一个优化:
一般... 阅读全帖
d**s
发帖数: 98
2
http://zhedahht.blog.163.com/blog/static/2541117420071289522817
程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
2007-02-28 21:52:28| 分类: 栈 | 标签:编程 就业 找工作 |字号大中小 订阅
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数
min、push以及pop的时间复杂度都是O(1)。
分析:这是去年google的一道面试题。
我看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序。
这样栈顶元素将是最小元素。但由于不能保证最后push进栈的元素最先出栈,这种思路
设计的数据结构已经不是一个栈了。
在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素进
栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素。
乍一看这样思路挺好的。但仔细一想,该思路存在一个重要的问题:如果当前最小元素
被pop出去,如何才能得到下一个最小元素?
因此仅仅只添加一个成员变量存放最小元素(或最... 阅读全帖
j**l
发帖数: 2911
3
来自主题: JobHunting版 - 关于Inplace排序栈元素的解法?
要求inplace对栈内的元素重新排序,你可以使用的方法
Push
Pop(不返回值)
Top
IsEmpty
是否应该递归,利用操作系统的隐含堆栈空间,得到一个伪inplace的算法?
假定栈元素是int,代码如下:
void Sort(Stack& s)
{
// 栈为空,无需排序
if (s.IsEmpty())
return;
// 先弹出栈顶元素x,对剩下的栈元素递归排序
int x = s.Top();
s.Pop();
Sort(s);
// 如果排好序的栈为空,把x送回栈即可,排序完成
if (s.IsEmpty())
{
s.Push(x);
return;
}
// 如果x不小于栈顶元素,同样把x送回栈即可,排序完成
int y = s.Top();
if (x >= y)
{
s.Push(x);
return;
}
// 否则, 令x归栈后,栈顶还是最大元素... 阅读全帖
d********n
发帖数: 191
4
word是有UI来显示多个剪切的内容,快捷键办不到吧?
我很多年前就想过这个问题,那样还真的挺方便的,直接进栈出栈。
同样的快捷键,以前是CTRL+V,现在变成按住CTRL不放,按一下V变成最近一次复制的
内容,放开v但是hold CTRL,再按一下V刚才粘贴的内容就变成倒数第二次复制的内容
,blablabla。不过这个的问题是想把最后一次复制的内容多次粘贴就不行了。所以V可以换成别的键值
当然这个栈可以有个容量,比如10。
同时还可以有一个快捷键,一键清空整个栈
我真蛋疼
j**l
发帖数: 2911
5
考虑直方图的每个元素(每根柱子),以它为高度的最大矩形,宽度可以向左右扩展。
所以问题就转换为怎么确定左右边界。
我们使用了一个栈,从左到右每根柱子依次入栈。
情形一:如果栈不空并且当前将要入栈的柱子比栈顶的柱子低,则有:
1. 栈顶柱子的右边界完全确定,其对应的局部最大矩形面积可求(下面说明了左边界在
它入栈时已确定)。更新全局最大矩形面积后,栈顶柱子可以依次出栈,直到当前的栈
顶柱子比当前要入栈的柱子低或者栈变为空栈。
2. 连续的出栈操作使得当前的栈顶柱子比当前要入栈的柱子低或者栈变为空栈, 这时
候,当前要入栈的柱子的左边界也确定,可以入栈。
情形二:如果栈为空或者当前要入栈的柱子比栈顶柱子高,则无出栈操作,且当前要入
栈的柱子的左边界确定。
总结:
1. 每个入栈操作, 如果入栈柱子低于栈顶柱子,则它确定了栈中比要入栈柱子高的那些
柱子的右边界,可以对它们执行出栈操作。出栈的过程伴随着矩形面积的计算。
2. 每个入栈操作,不论是否引起出栈操作,我们都可以确定当前要入栈柱子的左边界。
3. 每次入栈后,栈内所剩柱子一定保持高度单调非递减的顺序。
4. 可令最后一根柱子高度为-1
Y**G
发帖数: 1089
6
http://www.csdn.net/article/2014-01-21/2818203-Full-Stack-Engin
全栈工程师会是未来的发展趋势吗?
发表于2014-01-21 09:43| 8583次阅读| 来源CSDN| 43 条评论| 作者张红月
就业全栈工程师职业规划
摘要:全栈工程师也可以叫全端工程师,是最近网上很流行的一个词语。如今,随着软
件技术的迅速发展以及需求的不断变化,越来越多的工程师不仅是某个技术领域的专家
,还精通其它领域,难道这就是高手与菜鸟的区别吗?
最近,网上很流行一个词:全栈(Full Stack)工程师,也可以叫全端工程师,无论是
前端知识,还是后端架构你都要了解。甚至有些调皮的程序员这样理解全栈工程师:全
栈工程师=屌丝战斗机=系统+网络+研发+dba+架构+安全=没女朋友、拿一份工资做三份
事情的典型、每个站长都是一个全栈工程师,每个站群的站长都是超级全栈工程师。
以前,软件工程师最在意的是成为某个领域的专家或者高手,如今,随着软件技术的发
展以及需求的变化,尤其是越来越多的程序员出来自己创业,由于各种条件限制,许多
技术上的问题不得不... 阅读全帖
s******e
发帖数: 146
7
来自主题: JobHunting版 - longest valid Parentheses有O(n)算法么
我今天也正好做到这个。
想法是存上每个‘(’之前已经匹配的括号数量。
比如
()(()()(()
第1次遇到前括号,入栈数字是0,然后遇到后括号,现在的长度是2+0
第2次遇到前括号,入栈数字是2,当前长度重设为0
第3次遇到前括号,入栈数字是当前长度0.然后后括号,出栈,长度是2+0,
第4次遇到前括号,入栈数字是当前长度2.然后后括号,出栈,长度是2+2,
第5次遇到前括号,入栈数字是当前长度4,当前长度重设为0
第6次遇到前括号,入栈数字是当前长度0,遇到后括号,出栈,长度是2.
如果栈内仍有数字,目前是2,4,则全部出栈,和当前长度2比。取最长为4.
public class Solution {
public int longestValidParentheses(String s) {
// Start typing your Java solution below
// DO NOT write main() function
Stack stack = new Stack();
... 阅读全帖
s******e
发帖数: 146
8
来自主题: JobHunting版 - longest valid Parentheses有O(n)算法么
我今天也正好做到这个。
想法是存上每个‘(’之前已经匹配的括号数量。
比如
()(()()(()
第1次遇到前括号,入栈数字是0,然后遇到后括号,现在的长度是2+0
第2次遇到前括号,入栈数字是2,当前长度重设为0
第3次遇到前括号,入栈数字是当前长度0.然后后括号,出栈,长度是2+0,
第4次遇到前括号,入栈数字是当前长度2.然后后括号,出栈,长度是2+2,
第5次遇到前括号,入栈数字是当前长度4,当前长度重设为0
第6次遇到前括号,入栈数字是当前长度0,遇到后括号,出栈,长度是2.
如果栈内仍有数字,目前是2,4,则全部出栈,和当前长度2比。取最长为4.
public class Solution {
public int longestValidParentheses(String s) {
// Start typing your Java solution below
// DO NOT write main() function
Stack stack = new Stack();
... 阅读全帖
d****j
发帖数: 293
9
来自主题: Programming版 - I like this one.
这道题好像是facebook hacker cup 2011的第三题吧
刚开始没仔细看掉到陷阱了,直接sort连接..-_-
看到板上举得例子 "bc" "bca" 正解是 bcabc 而不是bcbca,才恍然大悟...
再看这个例子,如果是"bc" "bcd",那么sort再连接就没问题了
(楼上其他人举的例子和这个类似啦)
明显发现:如果一个词A=wx是另外一个词B=w的前缀,那么就需要考虑长单词多余部分x
和前缀w的大小,才能决定结果是AB 还是BA。
如果没有前缀关系,顺序连接打印就行了。
这就是我的idea,sort+栈+额外处理。
1.先sort.
2.第一个单词入栈
3.检查下一个单词cur是否以栈顶单词top为前缀,
a.如果不是,栈中元素全部 pop出,打印; cur入栈
b.是, 检查cur多余的部分x和top的大小
i. x<=top小,cur入栈
ii. x>top, top出栈打印
4. 重复3步骤直到单词表尾
5. 如果栈不为空,全部pop出栈打印
其中3步骤的几种情况,有的要下移一个单词检查,有的要继续检查当... 阅读全帖
k******a
发帖数: 44
10
来自主题: JobHunting版 - G家最新电面
利用栈操作。
遇到(,压栈
遇到字母,压栈
遇到),开始出栈,将出栈字符放入一个队列,直到出栈的字符是(,
将这个队列的最后一个字符作为root,其他字符都是他的儿子,然后将这个root再压栈。
直到完成,输出栈顶。
h**6
发帖数: 4160
11
来自主题: JobHunting版 - 回馈本版,贴GOOGLE电话面经
第三题用栈就可以解决吧。左括号压栈,右括号出栈,出栈的和字符串的括号必须对应
,不能尝试弹出空栈,字符串结束后栈必须为空。
就这几条要点,半分钟就能说完,写起来恐怕没二十分钟不好搞定啊。
x*****3
发帖数: 89
12
第十九回 云栈洞悟空收八戒 浮屠山玄奘受心经
(1) 各有心魔 (2) 老猪的简历 (3) 八戒的幸福就是苦 (4) 多心的心经 (5
) 为什么是多心经
(1)各有心魔
上回书说的是观音院唐僧脱难、高老庄大圣除魔。这三藏他们倒是从观音院脱难了,可
是在高老庄,这大圣除魔还真的说不上,故事的中心在第十九回呢。大圣充其量是把猪
头给赶跑了,而且这猪头到还真的不是魔,他只是给高太公的歪心眼充当了一回魔而已
、虽然猪头迷恋高家老三,但是他作为魔的角色纯属客串,谁叫那高太公心术不正呢。
如果这呆子真的是魔,那之前三番五次的道士和尚前来做法,肯定都不是被老猪给揍得
鼻青脸肿了。那些喜欢通过作法、符咒的手段来降妖伏魔的和尚道士,他们所能搞定的
,基本上都是那些另外空间的低灵鬼道之杂碎生物。如果稍微再厉害点的妖魔,这种术
类的手段就够呛了,为什么?因为擅长这种术类手段在人世间降妖伏魔的道人们,通常
都是没有神通的,差不多也就是天眼开了,能看到点阴间的东西、甚至大多数这样的人
他们连看都看不到。也就是说他们档次不够,才需要借助外法、符咒来召唤其它生灵来
替自己搞掂那些小鬼小魔小妖的。可是如果他们能... 阅读全帖
t*********7
发帖数: 255
13
来自主题: JobHunting版 - 攒RP,亚麻全程
Update:
上周五面的,刚接到HR电话,GG了...原因不清楚...
面试官一,白哥,N连击
面完之后,说了一大堆夸人的话
面试官二,白爷,HM,陪吃饭,聊天
面试官三,烙印, BAR RAISER,问了四个问题
一,用队列实现栈 (我用两个队列,一个只有出栈的时候用来做临时存储空间)
二,他说能不能进栈,出栈都是时间常数开销,我说可以实现双头队列,两边都能进出的,
他说好的.
三,21点游戏,要求就是很多人可以一起玩,然后,玩的时候玩家可以跟发牌器换牌等等,
设计完,还写了一个主方法,他说没问题.
四,实现栈有返回最大值最小值方法,这个老题,大家都懂的.
从头到尾没有表情.
面试官四,白爷,PM, 设计哈希表,包括动态申请存储空间,解决冲突,设计哈希方法等等.
搞完,
说了一大堆夸人的话.
面试官五,白哥,其他组的编程师, 谈简历,还有常规问题,比如你跟老板意见不合之类的.
面试官六,白哥,其他组的PM, 序列化和反序列化二叉树.
前序遍历,空节点用特殊符号代替,序列化,LEETCODE上有
反序列的时候他说输入是个字符串,所以在递归的时候用了一个整数变量模拟输入流的
得到下一个... 阅读全帖
t*********7
发帖数: 255
14
来自主题: JobHunting版 - 攒RP,亚麻全程
Update:
上周五面的,刚接到HR电话,GG了...原因不清楚...
面试官一,白哥,N连击
面完之后,说了一大堆夸人的话
面试官二,白爷,HM,陪吃饭,聊天
面试官三,烙印, BAR RAISER,问了四个问题
一,用队列实现栈 (我用两个队列,一个只有出栈的时候用来做临时存储空间)
二,他说能不能进栈,出栈都是时间常数开销,我说可以实现双头队列,两边都能进出的,
他说好的.
三,21点游戏,要求就是很多人可以一起玩,然后,玩的时候玩家可以跟发牌器换牌等等,
设计完,还写了一个主方法,他说没问题.
四,实现栈有返回最大值最小值方法,这个老题,大家都懂的.
从头到尾没有表情.
面试官四,白爷,PM, 设计哈希表,包括动态申请存储空间,解决冲突,设计哈希方法等等.
搞完,
说了一大堆夸人的话.
面试官五,白哥,其他组的编程师, 谈简历,还有常规问题,比如你跟老板意见不合之类的.
面试官六,白哥,其他组的PM, 序列化和反序列化二叉树.
前序遍历,空节点用特殊符号代替,序列化,LEETCODE上有
反序列的时候他说输入是个字符串,所以在递归的时候用了一个整数变量模拟输入流的
得到下一个... 阅读全帖
z*j
发帖数: 42
15
来自主题: JobHunting版 - Amazon coding question
说说我的理解:
基本上是在用栈模拟递归的后序遍历过程
对栈顶node, 要判断这个node是回溯过来的,还是刚push到栈顶的
case1:栈顶node左右孩子皆空, 到了叶节点.接下来就要回溯啦.
case2:左孩子回溯回来, 则访问右孩子(2sub cases)
case3:右孩子回溯回来, 则访问栈顶节点, 同时栈顶节点出栈
剩下case 是栈顶不是回溯回来的, 则继续压栈(深度优先搜索)
t*******r
发帖数: 22634
16
来自主题: MusicPlayer版 - 也问个成人学琴的问题(听力)
基本是这样。。。学究的说法,在通常的编译器里:
loop => if + increment + goto
call sub-routine => (大致概念)
1. 程序计数器内容进栈
2. 参数进栈
3. goto subroutine
4. 返回地址出栈
5. 如果是被调清栈语言,这时清栈
6. goto back
7. 如果是主调清栈语言,这时清栈
c***s
发帖数: 70028
17
打开中国第一水乡周庄官方网站,一则“周庄艺栈‘女掌门’虚位以待”的招募信息颇为吸人眼球,成功当选的女掌门不仅可免费获得艺栈2年经营权,经营期间房租全免,对于想创业的女性吸引力巨大。
据招募信息描述,此次招募的女掌门将执掌古镇内的高端文化人士雅集场所,经营管理南湖古琴社、马晓晖二胡沙龙。面对整栋古建豪宅的“垂手可得”,不少网友表现出浓厚兴趣。但女掌门要当选,门槛也不少,须爱好音乐、擅弹古琴或二胡、具艺术修养,最重要的还得经营有道,把艺栈办得有声有色。
周庄旅游公司相关负责人介绍说,今年上半年,周庄景区接待游客达284.15万人次,同比增长6%,散客游客比例增长迅速。同时选择在周庄枕河留宿,体验原味水乡生活的游客量也有所增长。为此,目前周庄在保留原有“小桥流水人家”水乡风貌的基础上,不断进行资源整合,推出了一批文化艺栈,兼具文化艺术展示、名家交流、文化沙龙、艺术教育普及等功能,以求让广大游客更全面感受到鲜活的水乡文艺特质。
此次求贤的南湖古琴社,位于周庄后港街,是一座二进庭院式古民居,也是苏州“吴门琴社”携会员交流、传播古琴艺术之地,深受高端文化人士推崇。另一处的马晓晖二胡沙龙,位于古镇贞... 阅读全帖
k*j
发帖数: 153
18
来自主题: JobHunting版 - 新鲜面经
那次的讨论结果不知道怎么样,但我写下我当时的做法。
我面试的时候只用讲大概思路。写high level的code。
我当时的大体思路就是先把string转成word和长度。用-个stack记录pair
,碰到连续的space只记录成length=1。用一个variable len记录当前stack里所有word
length之和,
1。 当len>10的时候。check时候栈里是否只有一个word,如果是,即output整个word
到一行里(出题人的意思)。如果栈里多个word,则舍弃当前栈顶元素。然后再output
剩下的元素。还要注意这是的栈里是否有space,有则可以pad空格在中间。(这里我没太
仔细考虑,可能还需要改进)
2。 当len=10
(a) 先check当前的word是不是空格,如果是,就把栈里的word一个个出栈,从右到左
output是的一行里。但当碰到stack里最后一个空格时,要check是否需要output多个空
格。因为出题人要求每一行的两头都必须是word,非空格。做法是check剩余要填满的
字符数是否是大于word里总和。差... 阅读全帖
h****e
发帖数: 928
19
来自主题: JobHunting版 - binary tree的in-order iterator怎么写?
明白了。我原先的想法是遍历的时候as lazy as possible,只要一找到
合适的结点就立刻返回。这样增加了程序的复杂度,造成有的结点多次入栈
和出栈,虽然两种方法入栈和出栈操作的次数似乎都是一样的。
下面是改写后的程序以及一个实例做比较:
class BinaryTreeIterator {
Stack stack = new Stack();
public BinaryTreeIterator(Node root) {
while (root!=null) {
stack.push(root);
root = root.left;
}
}
public boolean hasNext() {
return !stack.empty();
}
public Node next() {
Node node = stack.pop();
Node current = node.rig... 阅读全帖
j********r
发帖数: 127
20
来自主题: JobHunting版 - 一道facebook面试题
我的做法是求必须删除的位置
碰到左括号,入栈索引
碰到右括号,如果栈顶是左括号,就出栈,否则就入栈右括号索引
最后栈里的就是需要删掉的左右括号了。
这能给出其中一组合理解,不能给出另一组。
估计他的followup是给出所有合法字串。
n******n
发帖数: 49
21
来自主题: JobHunting版 - G面经
在想这题的时候 觉得它的思路跟largest rectangle under histogram的stack解法很
像。只是现在是栈顶元素比当前元素小的时候,弹出栈顶元素;之前histogram那题是
栈顶元素比当前元素大的时候,弹出。
原先那道histogram的题参考这个
http://wansishuang.appspot.com/?p=3002
n******n
发帖数: 49
22
来自主题: JobHunting版 - G面经
在想这题的时候 觉得它的思路跟largest rectangle under histogram的stack解法很
像。只是现在是栈顶元素比当前元素小的时候,弹出栈顶元素;之前histogram那题是
栈顶元素比当前元素大的时候,弹出。
原先那道histogram的题参考这个
http://wansishuang.appspot.com/?p=3002
n*******w
发帖数: 687
23
这个时候应该使用栈。
不断%10,把余数进栈。然后整数除以10.直到整数为0.
出栈打印到栈为空。
H****S
发帖数: 1359
24
来自主题: Programming版 - Learn monad in 10 minutes
其实只要有对type constructor有概念上的感知,基本花个5分钟浏览一遍就可以了。
这个真的只是皮毛,深入下去还是要学习各种具体的monad实现。List,Option这些有
一个“容器”的直观感受,所以理解起来容易。看看这个用State monad实现的stack操
作(copied from http://eed3si9n.com/learning-scalaz
def stackManip: State[Stack, Int] = for {
_ <- push(3)
a <- pop
b <- pop
} yield(b)
这个chained monad本身也是一个function,代表对于给定__任意__一个stack,做一次
进栈(3),和两次出栈操作。换句话说这代表的是对一个过程的描述,不需要任何具
体的输入。最后返回的State monad包含stack本身(操作后)以及最后一次出栈的数。
j**l
发帖数: 2911
25
有些类似,只是Max SubArray Sum有贪心的策略,一路向前走,不断更新舍弃。
这个题目用的是栈,有回溯的意味。不过每个元素最多入栈出栈一次,保证了O(n)的复
杂度。
这道题,其实更象编译原理课程中讲到的左右括号匹配,只是一个右括号,可以cancel
前面若干个左括号。
k******e
发帖数: 145
26
来自主题: JobHunting版 - ebay第一轮电话面经
第二个题目难道不是第一个题目的升级版本么?
是字符直接输出,是数字就入栈直到非数字就出栈直到栈空。
H********g
发帖数: 43926
27
国内以前的公共蹲坑厕所入栈的过程 确实跟push一样。不过出栈就不同了,一般是连
栈底一起运走。
D*****r
发帖数: 6791
28
来自主题: Programming版 - Python问题请教
应该是[]里的内容可以带-,外面没有这种。
其实递归做很好做,但是如果输入当字符串处理,递归时候,传字符串岂不是复制了大
量的中间结果了?
要么就一个数一个数的读,遇到‘-’就进栈,然后出栈的时候,一口气出到截止的数
。直到出完。
D*****r
发帖数: 6791
29
来自主题: Programming版 - Python问题请教
应该是[]里的内容可以带-,外面没有这种。
其实递归做很好做,但是如果输入当字符串处理,递归时候,传字符串岂不是复制了大
量的中间结果了?
要么就一个数一个数的读,遇到‘-’就进栈,然后出栈的时候,一口气出到截止的数
。直到出完。
m**a
发帖数: 139
30
搜索了一下,o(n)的解用stack来做,很多地方有解释:比如:
http://wansishuang.appspot.com/?p=3002
这个算法对2,2,2,4,3对吗?
他只算出栈时候高度为出栈柱子的矩形,这个例子里最大矩形是2,2,2,2,2 形成的。如
果有以上算法的话, 应该得不到吧? 还是我漏了什么?
y***m
发帖数: 7027
31
来自主题: JobHunting版 - 一道面试题
cost? 进栈出栈吧
a1->5就 a5->5把老a5拿出,重复上一过程而已...
g*****i
发帖数: 2162
32
来自主题: JobHunting版 - 攒人品,amazon一面经历
我觉得inorder,preorder, postorder的iterative都可以吧,但是我们不是比较结果,而
是过程. 入栈的时候两个数要都有node入,如果有exception说明结构不同.出栈的时候
值要一样.
n*******w
发帖数: 687
33
来自主题: JobHunting版 - 感恩发面经-Amazon第二轮电面
这样做复杂度是O(n^2)。
比较好的方法是top-down。用min max,递归实现在这里。
http://www.leetcode.com/2010/09/determine-if-binary-tree-is-bin
http://www.mitbbs.com/article_t/JobHunting/31990685.html
如果非递归先序后序做,也是这个思路。
需要改动的是,栈的结构变成,
stack{
Node n;
int min, max;
}
出栈的时候除了得到n,还得refresh min max。
递归中序,需要保留前一个遍历过的节点的值。
referennce或者pointer实现。其实容易错。
a********m
发帖数: 15480
34
来自主题: JobHunting版 - 怎么提高BST traversal efficiency?
压栈出栈都省了,还是快了一点。可能数据存储顺序弄的好也能快一点。不知道别的还
有啥。
i******r
发帖数: 793
35
来自主题: JobHunting版 - 上一道题吧
嗯,O(n)没错
用一个stack,左括号进栈,右括号看看能否出栈
这样scan一次就行了
i******r
发帖数: 793
36
来自主题: JobHunting版 - 上一道题吧
每个括号最多进栈一次,出栈一次
当然就是O(n)的
h****e
发帖数: 928
37
来自主题: JobHunting版 - binary tree的in-order iterator怎么写?
这道题看起来简单,用stack实现起来还是有一些小tricks的,例如
要记录那些结点已经被访问过了,减少不必要的压栈出栈操作等。
下面是我写的代码:
class SNode {
Node node;
boolean visited = false;
public SNode(Node n) {
node = n;
}
}
class BinaryTreeIterator {
Stack stack = new Stack();
public BinaryTreeIterator(Node root) {
SNode s = new SNode(root);
stack.push(s);
}
public boolean hasNext() {
return !stack.empty();
}
public Node next() {
SNode s = stack.pop();
do... 阅读全帖
h******6
发帖数: 2697
38
来自主题: JobHunting版 - 一道题
我怎么感觉跟我前几天报的面试题很像啊~
http://www.mitbbs.com/article/JobHunting/32217999_3.html
就是把所有节点构造一个二叉树,然后从root开始recursive。其中send相当于是压栈
然后调用recursive函数,所以相当于block住,然后等着下面一级级传递,然后返回的
时候相当于是receive解除block,其实就是出栈。
h******6
发帖数: 2697
39
来自主题: JobHunting版 - 一道题
我怎么感觉跟我前几天报的面试题很像啊~
http://www.mitbbs.com/article/JobHunting/32217999_3.html
就是把所有节点构造一个二叉树,然后从root开始recursive。其中send相当于是压栈
然后调用recursive函数,所以相当于block住,然后等着下面一级级传递,然后返回的
时候相当于是receive解除block,其实就是出栈。
f*****o
发帖数: 95
40
来自主题: JobHunting版 - 刚面完ebay,说打算招300个
上次也面到这个,咱用一个stack,先压栈,再出栈比对,考官直夸咱的方法妙,
最终也没给咱奥佛,说咱perl底子薄
t***t
发帖数: 6066
41
这个是典型的编译原理的题。用计算表达式的方法做,其实不难。每个symbol要么是
operator,要么是operand。operator有优先级。看优先级决定入栈或出栈。
p****e
发帖数: 3548
42
来自主题: JobHunting版 - 大家帮我看看这段code 哪儿错了
每次调用size()函数是要耗时的
而且你写在递归里面,要进栈出栈,也是耗时的
h***s
发帖数: 45
43
不同深度考 Binary Tree Traversal
1. 递归
2. 非递归,用栈
3. 非递归,不用栈, O(1) 空间 (Morris Traversal)
a***e
发帖数: 413
44
看着很容易,一写bruteforce的就TLE,后来看了idea是用stack,如下。
TLE的是O(N^2),用stack是因为每个元素只入栈出栈一次push 和pop都是O(1),所以
是O(N)是吧?一犯困就很糊涂。轻拍
int largestRectangleArea(vector &height) {
int maxArea=0;
int area=0;
int n = height.size();
if (n==1)
return height[0];
int j;
for (int i=0; i {
j=i+1;
while(j {
if (height[j]>=height[i])
{
area = height[i]*(j-i+1);
... 阅读全帖
p*********g
发帖数: 911
45
如果再定义一个类,里面包含一个状态位和一个树节点。
入栈,出栈都是对这个新的类来操作。
如果是这样,就很容易实现。不加状态位就感觉很麻烦。
坐等大牛来解答。
C*7
发帖数: 234
46
来自主题: JobHunting版 - 一道facebook面试题
stack入栈时删多余的右括号,出栈时删多余的左括号
或者都不用stack,指针左右各走一遍,计数删多余的行不行
a******n
发帖数: 206
47
来自主题: Stock版 - 最简单的办法是用1
最简单的办法是用1/换手率来近似平均持仓时间,按每天的vol, 一头入栈,一头出栈。
问题是机构和散户的timescale 不一样,机构持仓时间可能远大于 1/换手率。大家有
什么点子请不吝赐教。
小蝌蚪无以为报,有建设性的回帖发双黄包。谢谢大家。
d******i
发帖数: 7160
48
来自主题: Programming版 - C#复制栈是反序的?
首先的问题是如何定义“copy constructor”,或干脆"copy",to a given object.
一般讲和clone无异,
无非是构造一模一样,行为一模一样。
根据栈FILO的特性去歪曲“copy"的本意
而弄出个反序的玩意儿是不对的。
我不明白版上有些ID为啥对这种doubt觉得有趣。
就是因为是软写的,或很多人从了这歪理,所以不可置疑?
为什么C++的STL就不是反着copy的呢?
Java里呢?我不信会是反着的。
s*******u
发帖数: 35
49
来自主题: Quant版 - fibonacci recursion
一个数的n次方需要(n-1) 个乘法实现,时间复杂度当然是O(n);
zhou's book说递归算法时间复杂度是指数的,这个interviewer也同意,空间复杂度为
什么不同?
有谁解释的清楚点?压栈出栈的argument对时间和空间都适用的吗?我承认fibo有很好
的算法,但人家就是问递归的算法复杂度
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)