华为od笔试题体验
三道题,运气好都比较简单,感觉做的是数据处理题,而不是算法题。
100%,85%,84%
第一题:还原被压缩的字符串,大于等于3个的相同字母才能压缩
如:3dak还原为dddak,不能还原的输出!error
题不难,,注意处理不合法输入即可,我用的ascii判断是不是数字和小写字母
第二题:身高排序,输入一组无序身高,数值之间空格隔开。按高低高低高低...排好输出。交换位置时,交换最近的满足条件的,所以结果唯一。
思路:三指针,矮高矮,初始化下标值为101,因为没有-1。
如果左边大于中间,交换位置,指针不动。直接跳到下一回合。
如果右边大于中间,交换位置(不会打乱原有排序,因为中间一定大于左边)。
中间指针+2,左边指针等于中间-1,右边指针等于中间+1。下一回合
注意别数组越界,通过85%,剩下的没通过我也不知道为什么。
第三题: 求最少需要多少个面试官
题目描述: n为每个面试官最多面试场次,m为面试场次,后面给出每场面试的开始和结束时间,面试官在一段时间内只能面试一个人
输入
n
m
开始时间 结束时间
...
思路:每个面试官维护一个一维数组arr,遍历面试场次,并做以下判断,满足任意判断直接下一回合。
如果某个面试官数组大于2*n,直接跳过看下一个面试官。
如果为空直接加入。
如果开始时间大于等于数组最后一个元素,尾插入。
如果结束时间大于数组第一个元素,头插入。
如果面试时间位于arr[0]和arr[-1]之间,在这个面试官数组里看能不能找到相邻两段时间之间是否能塞下一场面试。
最后一道题没有不合法输入,只通过了84%,写到这突然想到为什么剩下的没通过,我在往arr内部插入时,没判断两个时间段之间有没有面试就直接插入,这就可能出现一个面试官在一段时间内面试两个人。因为arr被我打成一维就丢失了这个信息。可惜可惜还提前半小时交了卷
#前端招聘社招##华为##笔试题目#