头条面试,一道算法题挂了,虽然做出来了ORZ

昨天头条一面,面试官是个帅帅的小哥。
上来表示还没看完我的简历,能不能给他一些时间把简历看完……
我:额……好
然后让我介绍一下自己,我就简单说了一下自己的项目(主要就是驱动啊,网管,web前后端啊之类的)
讲完之后他问了一些项目的问题,然后说我们做一道编程题吧。
就是给一个字符串,得到它字典序最大的子序列。(他的表述方式是,删除一些字符,使得剩下的字符构成的字符串字典序是最大的)
我一听就觉得自己要凉……因为我对字典序这个概念的把握不是很准确……
然后我就问了一下字典序的具体概念,面试官表示这个东西应该很常用呀,我:emmm……
后来举了几个例子验证了一下内心的猜想。
然后很快得到O(n2)的解法:找到最大的字符,切掉它前面的字符串,然后在剩下的继续找最大的,切掉之间的,直到找完。
显然面试官对这个复杂度是不满意的,我也有心理预期,明显这是最暴力的算法。
后来说了几个比较扯淡的方案,自己都否掉了(嘴巴太快,也是无语
然后用桶给了一个O(N)空间,O(N)时间的算法,不过与面试官的心理预设是不太相符的,还让我给他说明了一下这个算法为啥是对的……
完了他还想让我优化,后来看了一下时间,说你先把这个代码写出来吧。
我就手撕出来了代码……急匆匆就交给他了,然后发现有个边界条件没有考虑,还有几处笔误……囧。
后来回了等待区,过了一会收到了HR的通知说挂了。
emmm……
感觉凉凉的呀,以前都觉得字符串的题目很烦,不愿意练,结果一面直接打脸……还是要多学习一个ORZ还有就是虽然说要保持跟面试官的交流,但是方案还是要自己先过一遍再说出来,免得大家都尴尬……
#实习##春招##面经#
全部评论
估计他想要这么一个O(n)算法: str="abcbabcba" stack=""  //栈,保存答案 for (int i=0;i<str.length;i++){   while (stack!=空 or ans.top<str[i]) ans.pop()   ans.push(str[i]); }
点赞 回复 分享
发布于 2018-04-01 09:54
头条是我面过公司里最看重的算法的公司。哎。
点赞 回复 分享
发布于 2018-04-01 10:00
楼主,“字典序最大”,这是跟谁在比较啊?是说要求出字典序最大的子串,并且子串的元素个数也要最大? 虽然看完你的暴力解法以后,大概是明白什么意思了,但如果面试官这么跟我描述这道题,我估计是看不懂的。。
点赞 回复 分享
发布于 2018-04-01 11:07
感觉很简单呀,把最后一个字符记录下来,从**前找,比它大的也记录下来。时间复杂度为O(n)
点赞 回复 分享
发布于 2019-01-27 15:09

相关推荐

点赞 46 评论
分享
牛客网
牛客企业服务