美团2025秋招第五次笔试(技术方向)

选择题十道题,一道题三分,一共三十分。挺多大模型相关的东西,训练模型这一块完全不熟悉,有一道计网的题,求子网的,这个好歹是科班学过,还有一个用栈求表达式的值。
编程题三道题,前两道20分,后一道30分,一共70分。
第一道题,寻找 *dp格式的字符串有多少个,要求不能重复,就直接放到集合里自动去重,dp前面的字符不能有d或者p。
第二道题,给出数组a,任意排序,让数组b的和最大,数组b第i个数是数组a从0到i没有出现的最小非负整数,样例给的数组a里面没有重复元素,很朴素的一个想法就是数组a从小到大排序,这样数组b会递增,而且和最大,交了一下发现部分正确。没有考虑有重复元素的情况,有重复元素,就把所有的重复元素拼接到后面,因为不影响后面的值了,因为前面已经有过这些数字了,这样就过了。
第三题,给一个树,节点的值是如果是叶子节点就是自己本身的值,如果有子节点就是和子节点的值异或取最大。给出123三个操作,1是变换值,2是求x到y最大的值,3是求以x为根的值。写了一堆,样例通过,但是百分之0。
#发面经攒人品##我的秋招日记##笔试##秋招白月光##牛客AI配图神器#
全部评论
第三题难
点赞 回复 分享
发布于 09-06 14:45 天津
第二题代码如下: #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+10; int n,a[N]; vector<int>b,c; map<int,int>mp; ll sum; int main() { cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; if(mp[a[i]]>0){ c.push_back(a[i]); } else{ b.push_back(a[i]); } mp[a[i]]++; } sort(b.begin(),b.end()); for(int i=0;i<n;i++){ if(i<b.size())a[i]=b[i]; else a[i]=c[i-b.size()]; } int mx=0; for(int i=0;i<n;i++){ if(a[i]==mx){ mx=a[i]+1; } sum+=mx; } cout<<sum<<endl; for(int i=0;i<n;i++){ if(i)cout<<" "; cout<<a[i]; } }
点赞 回复 分享
发布于 09-06 11:26 天津
第一题代码如下: #include <bits/stdc++.h> using namespace std; set<string>st; string s; int main() { cin>>s; int t=0; for(int i=0;i<s.size()-1;i++){ if(s[i]=='d'&amp;&amp;s[i+1]=='p'){ string str=s.substr(t,i-t); t=i+2; if(str.find('d')==-1&amp;&amp;str.find('p')==-1){ st.insert(str); } } } cout<<st.size(); return 0; }
点赞 回复 分享
发布于 09-06 11:25 天津

相关推荐

评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务