美团笔试 8.8

100% 100% 64% 100% 100%
第一题
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int N, K;


int main(){
    
    int T ;
    cin>>T;
    while(T--){
        cin>>N >> K;
        vector<int> data(N);
        for(int i=0;i<N;i++)
            cin >> data[i];
        sort(data.begin(), data.end());

        int ans;

        if(K>N){
            cout<< "NO" <<endl;
            continue; 
        }

        if(K==0)
            ans = 1;
        else
            ans = data[K-1] + 1;
        
        if(ans < 1 || ans > N){
            cout<<"NO"<<endl;
            continue;
        }
        
        if(K<N && data[K-1]==data[K]){
            cout<< "NO" <<endl;
            continue;
        }
        
        cout<<"YES"<<endl;
        cout<<ans<<endl;
    }
}
第二题
#include<iostream>
#include<vector>

using namespace std;

int main(){
    string str;
    getline(cin,str);
    string ret;
    for(int i=0 ; i<str.size() ;i++){
        if(str[i] == ' ')
            continue;
        else{
            ret+=str[i];
            int tmp = i+1;
            while( tmp <str.size() && (str[tmp] == str[i] || str[tmp] == ' ') )
                tmp++;
            i = tmp-1;
        }
    }
    cout<<ret<<endl;
    return 0;
}
第三题
#include<iostream>
#include<vector>
#include<set>
using namespace std;

int main(){
    int N;
    cin>>N;
    vector<int> data(N);
    for(int i=0;i<N;i++)
        cin>>data[i];
    
    set<int> s;
    int ans = 0;

    
    for(int i=0;i<N;i++){
        auto it = s.lower_bound(data[i]);
        if(it != s.begin()){
            ans += (*(--it) * (i+1));
        }
        s.insert(data[i]);
    }

    cout<< ans <<endl;
    return 0;
}
第四题
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int getIndex(vector<int>& tree , int num){
    int l = 0 , r = tree.size() -1;
    while(l<r){
        int mid = (l+r)>>1;
        if(tree[mid] == num)
            return mid;
        if(tree[mid] > num)
            r = mid;
        else
            l = mid + 1;
    }
    return l;
}

int findroot(vector<int> & tree , int x){
    if(tree[x] != -1){
        tree[x] = findroot(tree,tree[x]);
        return tree[x];
    }else
        return x;
}

int main(){
    int N;
    cin>>N;
    vector<int> data(N);
    for(int i=0;i<N;i++)
        cin>>data[i];

    vector<int> tmp(data);
    sort(tmp.begin(),tmp.end());
    tmp.erase( unique(tmp.begin(),tmp.end()) , tmp.end());
    
    vector<int> tree(tmp.size(),-1);

    int ans = 0;

    for(int i=0;i<N/2 ;i++){
        if(data[i] != data[i+N/2]){
            int x = getIndex(tmp,data[i]) , y = getIndex(tmp,data[i+N/2]);
            int xroot = findroot(tree,x) , yroot = findroot(tree,y);
            if(xroot!=yroot){
                tree[xroot] = yroot;
                ans++;
            }
        }
    }
    cout<< ans <<endl;
    return 0;
}
第五题
#include<iostream>
#include<vector>
#include<stack>
using namespace std;


typedef struct node{
    struct node* left;
    struct node* right;
    int val;
    node():left(nullptr) , right(nullptr) ,val(0){}
    node(int v):left(nullptr) , right(nullptr) ,val(v){}
}Node;

vector<Node*> Tree;

void createTree(vector<pair<int,int>>& data , Node* root){
    Tree[root->val] = root;
    int l = data[root->val].first , r = data[root->val].second;
    if(l){
        root->left = new Node(l);
        createTree(data,root->left);
    }
    if(r){
        root->right = new Node(r);
        createTree(data,root->right);
    }
}

int main(){
    int N,M,K;
    cin>>N>>M>>K;
    vector<pair<int,int>> data(N+1);
    Tree.resize(N+1);
    for(int i=1;i<=N;i++)
        cin>>data[i].first >> data[i].second;
    Node* root = new Node(K);
    createTree(data,root);

    while(M--){
        int t;
        cin>>t;
        Node* tmp = Tree[t]->left;
        Tree[t]->left = Tree[t]->right;
        Tree[t]->right = tmp; 
    }

    stack<Node*> s;
    while(!s.empty() || root){
        while(root){
            s.push(root);
            root = root->left;
        }

        Node* tmp = s.top() ; s.pop();
        cout<<tmp->val << " ";
        root = tmp->right;
    }
    cout<<endl;
    return 0;
}






#美团笔试##笔经##美团#
全部评论
这就是巨佬吗
1 回复 分享
发布于 2021-08-08 18:45
求题干。。。
1 回复 分享
发布于 2021-08-08 13:20
👍
1 回复 分享
发布于 2021-08-08 13:17
兄弟,第三题改成 long long 就过了😂😂😂
1 回复 分享
发布于 2021-08-08 13:07
怎么练才能达到这个地步
1 回复 分享
发布于 2021-08-08 12:49
大佬啊
1 回复 分享
发布于 2021-08-08 12:37
矮油,同学很不错啊
点赞 回复 分享
发布于 2021-08-09 12:02
大佬,我不太懂C++, 感觉STL 太强大了,像那个lower_bound 函数,Java里面都没有,我想请问下第四题, 题目中说的是对称就是一个完美的,能不能直接判断有多少个不同, 大概意思就是 1- N / 2 的数与 N/2 + 1  - N  两个数组,他们分别对应比较,直接返回不同的个数
点赞 回复 分享
发布于 2021-08-08 17:57

相关推荐

点赞 评论 收藏
分享
其实本来打算等lastday的时候再写的,但是现在提笔写下这篇总结完全是出于自己的想法,今天上午自己被学校发的签到吵醒时才突然想明白了很多事情,遂决定写下本文进行总结,虽然现在顶多算2.5个月,但也大差不差喵。回看这段时间的日常实习,我的关键词是:遗憾,焦虑。当然也有快乐的时候,不过大部分时间都是前面这两种情绪主导。为了避免后人再次踩坑,我将在本文详细解释我遇到的困难&nbsp;+&nbsp;产生的原因&nbsp;+&nbsp;应对的措施。同时总结新人实习时除了业务本身,还有如何处理生活与工作上的平衡,调控自身的情绪,让自己恢复到最好的工作状态。本文不会教你实习怎么去做产出,因为有产出的前提是你的心态足够健康,且在工作之余还有时间去...
wuwuwuoow:你的经历跟挺像,但我实力远没你强,现在只能干外包。但解决焦虑这块我应该比你更有经验,因为我曾经也非常迷茫和焦虑: 1.规律作息。无论节假日,都必须在同一时间点睡觉,同一时间点起床。放假睡的多,工作睡的少,这就是典型的作息不规律。将直接干扰前额叶皮层功能,导致情绪波动(易怒、焦虑)。无论上班还是周末,我都是 11:30 睡,7 点起床。7.5h 睡眠,完全足够了。 2.运动。缓解压力,强身健体,提高免疫力。不要觉得每天没有时间锻炼,都是懒惰的借口。 3.冥想。长期练习会增厚前额叶皮层(理性决策区),缩小杏仁核体积(减少情绪过敏反应,核心),增强情绪调控能力。 方法很简单,任何时候都能做。就是闭上眼睛,只专注自己的呼吸,不去想其他任何事情。你可以尝试一下,你会发现非常难只专注呼吸,会有大量的想法涌现出来(什么走马灯),不要去压抑它们,而是放平心态,把注意力继续放在呼吸上面。 而且最重要的是,冥想让你学会“活在当下”。因为处于冥想的你,除了专注呼吸你还能做什么呢?你什么都做不了。生活也是这样,我们无法改变过去,无法预知未来会发生什么,我们能做的只有手头的事情,除此之外什么都别想,因为你无法去改变它们。 4.工作与生活分离。工作不是生活的全部,生活可不是只有工作。像我放假的时候,从不带电脑回去。放假该玩就玩吧。 上面要是都能做到,其实完全解决不了你工作上的问题,完不成的需求还是完不成,面试该挂还是得挂。不过呢,当你再次迷茫,再次焦虑的时候,你会发现,诶,还好,没这么难受。比如面试挂了,可能以前的你会感觉非常难受。但如果你做到以上 4 点,你还是会难受的,但其实又没这么难受,可能你会这样想:既然挂了我还能怎么样?这公司不要我,有的是公司要我!
投递腾讯等公司6个岗位 >
点赞 评论 收藏
分享
评论
7
24
分享

创作者周榜

更多
牛客网
牛客企业服务