我属于思考比较慢的选手,主要是对这些算法掌握不是很熟练。所以我觉得我虽然容易写bug,但是还是笔试适合一点吧。
一面有两个问题答不上来,一个是从左上要右下只允许向右向下的dp,然后找到最大和是100的倍数,这个可以多开一维表示余数,讨论最大值的时候加上余数,*100也不会很慢
dp[i][j][k]到第i 行第j列余数为k的最大价值
还有个中文字典树,gbk是三个字节,所以把它分开处理,要不然叉树太多,然后可以变为256叉树,这个又要怎么优化,我觉得用map吧
二面比较累,全部答不上来(个人问题,不过面试官那里也有点吵,我没有反复提问
虽然大一课程设计做了红黑树,但是我对AVL并没有深入了解过,也没有对比,只知道大概思想,所以我的简历这一条已经删去,避免再被问,具体原因也可以参见这篇博客,我也学习一下
面试官对我的催促可能也是怕我作弊吧,其实我更好的策略可能找他要个提示,要在气势上不输,问的问题虽然不难,想想还是能做的
首先是个字符串a和b,a长度10w,b长度5w,a可以改变一个字符,问是否存在模式串b
枚举过去就可以了,hash和exkmp都可以。想了想hash确实可以,就是多个log,但是exkmp没想到啊
hash是判断枚举的这个点前半段和b串是不是相等,扩展kmp可以o(1)判断这个,只要前后做两次就好了,@biu哥太强了
还有就是一堆向量选其中的几个使得选取的模最大
@绿色夹克衫 姥爷上来就秒了,我是没什么想法,因为我当时也想到了凸包,但是觉得没办法说明,然后我还在想前面的题。所以这个不会了就跳过吧,暂时不要想
姥爷画了个图,其实凸包的过程就是把一些肯定没有贡献的向量删去了,然后取直径即可,所以怎么对向量做凸包呢,先极角排序,然后改下板子就好emmmmm我是真的菜
下一个题就比较简单了,就是找区间存在定值
很快想到了二分,但是右边并不递增啊,但是如果区间有负数呢,枚举左端点,但是值只有1w,所以其实是同余问题吧,把相同余数的都放进一个桶,因为有了正负,所以就是需要2w个桶,然后只要一个值里有两个及以上的数差是1w就存在,输出所有区间
没有气势是这场面试失败的关键,不过我感觉题目真的是多想想也能做,和面试官不是一个段位的,我真的太菜了