美团第二次笔试,记录

第一题,栈模拟

void first(){
    int t;
    cin>>t;

    while(t>0){
        int n;
        cin>>n;
        vector<int> nums(n);
        vector<int> target(n);
        
        for(int i=0;i<n;i++){
            cin>>nums[i];
        }
        stack<int> sta;

        sta.push(nums[0]);

        for(int i=0;i<n;i++){
            cin>>target[i];
        }
        int temp=1;
        for(int i=0;i<n;i++){
            if(sta.empty()&&temp<n){
                sta.push(nums[temp++]);
            }
            while(target[i]!=sta.top() && temp<n){
                sta.push(nums[temp++]);
            }

            if(temp==n && sta.top()!=target[i]){
                cout<<"No"<<endl;
                break;
            }
            else{
                sta.pop();
            }
        }
        if(sta.empty()){
            cout<<"Yes"<<endl;
        }
        t--;
    }
}

第二题 简单dp;

void second(){
    int n;
    cin>>n;
    vector<int> nums(n);
    for(int i=0;i<n;i++){
        cin>>nums[i];
    }
    vector<int> dp(n,0);
    if(n==1){ cout<<nums[0]<<endl;return;}
    if(n==2){ cout<<max(nums[0],nums[1])<<endl;return;}
    if(n==3){ cout<<max(nums[0],max(nums[1],nums[2]))<<endl;return;}
    
    dp[0]=nums[0];
    dp[1]=max(nums[1],dp[0]);
    dp[2]=max(dp[1],nums[2]);

    for(int i=3;i<n;i++){
        dp[i]=max(dp[i-3]+nums[i],dp[i-1]);
    }
    cout<<dp[n-1]<<endl;
}


第三题

前面直接写,82%,加上前缀和,没变化,加上二分查找,才过,二分查找很重要

void third(){

    int n,m;
    cin>>n>>m;
    vector<int> nums(n);
    for(int i=0;i<n;i++){
        cin>>nums[i];
    }
    vector<long> bags(m);
    for(int i=0;i<m;i++){
        cin>>bags[i];
    }

    //sort(nums.begin(),nums.end());

    vector<long> prefix(n);
    prefix[0]=nums[0]*nums[0];
    for(int i=1;i<n;i++){
        prefix[i]=prefix[i-1]+nums[i]*nums[i];
    }
    int flag=0;
    for(int i=0;i<m;i++){
        long bag=bags[i];
        int left =0,right=n-1;
        bool ttt=false;
        while(left<right){
            int mid = left+(right-left)/2;
            if(prefix[mid]==bag){
                flag=mid;
                ttt=true;
                break;
            }
            else if(prefix[mid]>bag){
                right=mid-1;
            }
            else{
                left=mid+1;
            }
        }
        if(!ttt){
            if(bag>=prefix[left]){
                flag=left;
            }
            else if(bag>=prefix[right]){
                flag=right;
            }
            else{
                flag=right-1;
            }
        }
        
        cout<<flag+1;
        if(i<m-1){
            cout<<" ";
        }
    }

}

第四题

用map模拟

void four(){
    string str;
    cin>>str;
    int n;
    cin>>n;
    vector<string> query(n);
    for(int i=0;i<n;i++){
        cin>>query[i];
    }

    string temp="";
    string key="";
    unordered_map<string,string> map;
    int len = str.size();
    for(int i=0;i<len;i++){
        if(str[i]=='='){
            key=temp;
            temp="";
        }
        else if(str[i]==';'){
            map[key]=temp;
            temp="";
        }
        else{
            temp+=str[i];
        }
    }
    for(int i=0;i<n;i++){
        if(map.find(query[i])==map.end()){
            cout<<"EMPTY"<<endl;
        }
        else{
            cout<<map[query[i]]<<endl;
        }
    }
}

第五题 压轴的动态规划,又有破坏次数,还要买和不买

void fifth(){
    int n,k;
    cin>>n>>k;
    vector<int> nums(n);
    for(int i=0;i<n;i++){
        cin>>nums[i];
    }
    
    vector<vector<vector<int>>> dp(n,vector<vector<int>>(k+1,vector<int>(2,0)));
    dp[0][0][1]=nums[0];

    for(int i=1;i<n;i++){
        dp[i][0][0]=max(dp[i-1][0][0],dp[i-1][0][1]);
        dp[i][0][1]=dp[i-1][0][0]+nums[i];
        for(int j=1;j<=k;j++){
            dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]);
            dp[i][j][1]=max(dp[i-1][j-1][1],dp[i-1][j][0])+nums[i];
        }
    }

    cout<<max(dp[n-1][k][0],dp[n-1][k][1])<<endl;

}

#笔试复盘#
全部评论
3.18要寄了😭😭😭
点赞 回复 分享
发布于 2023-03-25 21:26 湖南
什么岗啊
点赞 回复 分享
发布于 2023-03-25 21:30 北京
有大佬知道报名第二次笔试会覆盖第一次笔试的成绩吗
点赞 回复 分享
发布于 2023-03-25 21:34 上海
为什么第二题不要dpi-2呀
点赞 回复 分享
发布于 2023-03-25 21:53 湖南
请问巧克力那题样例是有序的吗
点赞 回复 分享
发布于 2023-03-25 22:07 江苏

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++&nbsp;&amp;&nbsp;Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
评论
2
12
分享
牛客网
牛客企业服务