
这个人才测评的考题就比较奇葩了,与技术无关,目前也不知道有啥影响,考试形式为全是选择题,分为几个不同的部分,前三个部分每题会有限时,60s左右一提,最后一部分不限时,整个过程大概50min,实际上30min左右可完成
阿里的笔试总共就两道题,每题50分,期间录屏+开摄像头+手机锁,基本杜绝作弊的可能(但录屏只能锁一块屏幕,拓展屏貌似不受影响)
听说无论笔试情况如何都能面试,这个暂时不收很清楚,反正我是一道也没写出来2333
我凭借记忆记录一下笔试题,可能会有偏差
有一个只包含有0和1的序列,每次可以选择翻转一个数字,此时它两边的数字也会跟着翻转,如果选择翻转index为0或者string.size()-1的数字则只会影响到它旁边的一个数。需要将所有的数字都翻转为0,输出最少的翻转次数
我拿到这个题的想法就是每次遇到“11”序列则翻转,保证前面已经翻转的数字都为0,但无奈写完之后发现有“10101”这种序列, 查了好久才发现,最后没写出来。
int count = 0;
for(int i = 0; i < s.size()-1; ++i){
if(s[i] == 1){
s[i] ^= 1; //翻转
s[i+1] ^= 1;
if(i + 2 < s.size()) //判断是否为倒数第二位
s[i+2] ^= 1;
count++;
}
}
if(s[s.size()-1])
return -1;
return count;可以考虑不做实际的翻转,只记录该位被翻转了多少次,而每一位是由周围2位影响的,所以需要维护一个队列来记录目前哪些位被翻转
int count = 0;
queue<int> q;
for(int i = 0; i < s.size(), ++i){
while(!q.empty() && q.front() + 2 <= i)
q.pop(); //剔除已经无影响的翻转
if(q.size() % 2 != A[i]){ //判断是否需要翻转
count++;
q.push(i);
}
}
while(!q.empty()){
if(q.front() == s.size()-1){ //最后一位还需要翻转则无法成功翻转
free(q);
return -1;
}
q.pop();
}
return count;这个题我只简单的看了一眼,无法保证完全正确
输入m与n,表示一共有m只箭与n个怪,并会给出每一只怪的体力值,每一只箭的攻击力和价钱,输出杀死全部怪的最少花钱数
笔试的时候只是瞟了一眼,没有做,后来又想了一下,有一个大概的思路:用一个结构体存储箭,把箭按价钱排序,然后对每个怪遍历箭的list去寻找可以杀死它的箭并记录下价格,不确定题目是有放回还是无放回,对应的是用完的箭是否删除。不知道对不对,先写着,感觉如果还有面试应该会被问到。
笔试第二天就安排了面试效率还是很高的,不像腾讯,都要一周了还没开始面
面试主要分为知识点考察和现场编程两个环节,知识点考察是通过电话来进行的,貌似是阿里那边有一个电话转接的软件,感觉通话质量一般;现场编程是通过邮箱发过来的链接进入,面试官那边可以看到你这边写的代码。
整个面试过程中知识点考察大概1h左右,现场编程30min吧,我这边由于网络原因所以中间花的时间比较多。
写代码是用的阿里伯乐在线评测系统,代码不用编译,就在白板上手写,没有自动补全,面试完后会把你的代码给你发过来,还挺贴心
class Solution {
public:
int myAtoi(string s) {
if(s.size() == 0)
return 0;
int i = 0;
while(i < s.size() && s[i] == ' ')
++i;
if(i >= s.size())
return 0;
int exit = 0;
int flag = 0;
if(s[i] == '+'){
++i;
exit = 1;
}
if(!exit && s[i] == '-'){
flag = 1;
++i;
}
long long res = 0;
while(i < s.size()){
if(s[i] < '0' || s[i] > '9')
break;
res *= 10;
res += (s[i] - '0');
if(res >= INT_MAX)
break;
++i;
}
if(flag){
res = 0 - res;
if(res <= INT_MIN)
return INT_MIN;
}
if(res >= INT_MAX)
return INT_MAX;
int ans = int(res);
return ans;
}
};