拼多多-业务平台研发工程师-20190513一面电面
之前过了笔试,4题做出前三题:https://www.nowcoder.com/discuss/187446?toCommentId=3010155
很快就收到面试邮件,5.11去上海现场面可以当天结束(我留在学校color run去了…)然后预约13号或14号19:00-21:00中间的一小时,我选的13号19:00-20:00;下午还和hr电话联系了下,因为昨晚错过一个上海的电话,不知道会不会调时间。电话确认后还收到了邮件。
提前预约的图书馆研讨间,现是电话过来说加微信,然后视频面试。
自我介绍&&其中项目
笔试第一题用的递归,时间复杂度O(n^2),如果改为数据集长度为100W?该怎么办
那就要降低复杂度了,最后想法是用两个指针,一前一后p1和p2,遇到相同的就计数+1,标记已经合并,然后指针p1往前,p2往后,再判断(针对abba的情况),遇到不同就p2到p1的位置,p1往前一步。
//期间也胡扯过映射和并行…
然后据说笔试题题4做出来的人比题3多???难道不是动归?没记录题目哎…
然后电面共享桌面代码:codepile;collabedit
//money: 初始筹码数量 //seq: 每一轮游戏的结果,W表示赢,L表示输了 //int play(int money, string seq){
#include <iostream>
#include <string>
using namespace std;
int play(int money, string seq){
int x=1;
int re=money;
char * cstr = new char [seq.length()+1];
strcpy (cstr, seq.c_str());
int len=seq.length();
for(int i=0;i<len;i++){
if(cstr[i]=='W'){
// if(re>=x)
re+=x;
// else break;
x=1;
}
else if(cstr[i]=='L'){
if(re>=x)
re-=x;
else break;
x*=2;
}
}
return re;
}
int main(int argc, char *argv[]) {
// cout<<play(10,"LLLL");
cout<<play(0,"W");
}
题目是前三行,就是你手中有money个筹码,然后第一次下注为1(赢就变11,输就变9)之后赢了还下注为1,输了赌注就X2 问最后剩余筹码数量。
搞清啥时候该终止吧:1、string序列读完正常退出 2、当前筹码不够下一次下注输掉,比如手头为0,下次要1但赢了,那可以;手头为3,下次要4但输了,就不行。
检查代码时感觉被坑了,那两行注释的代码……被面试官多问了一句我才加上去的,似乎不应该加啊……
一小时很快过去了,问面试官认为比较有用的专业基础有哪些:基础不一定决定你能不能做一件事(就是也许基础差,但做事是可以的),但是做的好与不好的决定因素(大概就是瓶颈的意思吧)
后续随缘了
#拼多多##C++工程师##面经##实习#