2021大厂面经整理
作者:互联网
美团
笔试:
小美想要学习吉他,但是她的精力有限,小美初始学习精力为x,意味着此时学习一个小时可以获得x的知识量,但是小美一天要学习n小时,如果小美选择学习一小时,那她会获得x知识量,精力会减少a,如果休息一小时她不会获得知识量,但是会增加b精力,问小美怎么安排学习时间可以获得最大知识量?
输入示例: [x,a,b,n],初始精力为x,学习一小时精力减少a,休息一小时精力增加b,n小时能获得多少知识量
如[10,5,5,3],初始精力为10,学习一小时精力减少5,休息一小时精力增加5,3小时能获得多少知识量,此时选择先休息一小时然后学两小时获得知识量最大,即3小时获得知识量分别为[0,15,10],一共获得25知识量
解题思路:
1.按照题目要求来看,必然是先休息t小时后,再学习收益最大,因此可以构造一个初始值为x+b*t,差值为-a的等差数列进行求和,最大值极为寻找合适的t,转化为函数问题进行求解。
2.dfs遍历枚举,dfs(当前精力,剩余时间,a,b)
int dfs(cur,t,a,b){
if(t==0)
return 0;
if(cur>=a){
int t1 = dfs(cur-a,t-1,a,b)+cur;
int t2 = dfs(cur+b,t-1,a,b);
return max(t1,t2);
}
else{
return dfs(cur+b,t-1,a,b);
}
字节跳动
笔试
在吃鸡跳伞过程中,每个玩家可以跟随一个选手,也可以不跟随选手,不跟随默认自己是一个队伍,如果选择跟随一个玩家,那么跟随者和被跟随者就是一个队伍,输入数字n,代表有n次跟随操作,每次跟随操作都会给出两个数字x,y,意思是x跟随了y,那么x和y就组成了一个队伍,队伍成员是2,问最终最大的队伍成员是多少?
输入示例:
n
x1 y1
x2 y2
意思是x1跟随了y1,x2跟随了y2。
如:
3
1 2
2 3
3 4
此时最大队伍成员数量为4,因为1跟随了2,2又跟随了3,3又跟随了4,队伍成员是[1,2,3,4]。
解题思路:
使用并查集,但是要注意一点在于,如果a->b,b->c,此时使用一次找根,a->c,但是若之后再次出现b跟随其他人,原本跟着b的都要转换祖宗值,此时要给每个节点存储追随者
关于并查集的使用,可以参考这篇博客
并查集
标签:精力,cur,面经,知识,dfs,跟随,2021,小时,大厂 来源: https://blog.csdn.net/qq_40986693/article/details/117513792