今天还是在刷题,下午考试。
临近考试,竟然还有点紧张。也是很多年没有考试了。这次参加了HR推荐的华为机考,一共有3题,分别是100/100/200分,总计400分。在牛客网模拟环境中网上考试。
第一题是找车位问题,给定一个0和1组成的数组,1代表车位占用,0代表没有占用。现在要停一辆车进去,这辆车一定要距离其他任何的车距离最大。求这个最大距离。
例如这样一个车位布局:1,0,0,0,0.1,1,0
将车位停在第三个地方,他与附近车位距离为2和3,那么最近的车距离2。
这个题目不难,但是由于我没有注意好边界条件,导致一直有几个用例执行没通过,排查了很久才发现,一道题花了四十多分钟,属实拉胯了。
第二题,给定字符串1,和字符串2。字符串1所有字符的排列组合组成的新串,如果在字符串2里面存在一样的序列(子串),则返回在字符串2中的下标。
这道题一开始我是想求出字符串1所有的排列组合数据,再去字符串2里面找,但是字符串的排列组合的情况实在太多了。算法复杂度一定会超标的。
后来我想到动态规划算法,意思是如果字符串2第N个字符,在字符串1中存在,则那么从这个字符开始往后找,如果后面每一个字符都在字符串1中存在且没有被占用。则继续找下一个。如果无法匹配,那么这个N下下标开始的子串不可能是字符串1的某种组合,则找N+1。
直到字符串1中所有的字符都被占用,说明str2中的第N位开头的子串就是字符串1的一个排列组合。
但是这一题运行到90%的用例时报错无法在规定时间内执行完成。由于看不到报错用例,我看半天还是没有看出来哪个边界条件忽视了。可惜没有完全做出来。
第三题,给定一个二叉树的字符串表示方法,例如a{b,c},就是一个a为顶点,b为左节点,c为右节点,输出这个二叉树的中序遍历结果。实际输入的二叉树层级结构比较复杂,也就是b和c对应的不是一个节点而是子树。
这一题原本是想建立一个二叉树的数据结构,但发现过于复杂。后来想到可以把输入字符串拆解成简单二叉树,对每个二叉树都按照中序遍历的方式重新输出。而如果子节点是一个树的话,就继续对这个子树拆分,直到拆到叶子结点,然后再输出。
我觉得思路没有问题,就是没时间继续写下去了,还是很可惜。
最终,只考了不到200分,太垃圾了。