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

相关推荐

点赞 评论 收藏
分享
感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
评论
7
24
分享
正在热议
# 25届秋招总结 #
442727次浏览 4513人参与
# 春招别灰心,我们一人来一句鼓励 #
42019次浏览 533人参与
# 北方华创开奖 #
107445次浏览 600人参与
# 地方国企笔面经互助 #
7965次浏览 18人参与
# 同bg的你秋招战况如何? #
76850次浏览 564人参与
# 实习必须要去大厂吗? #
55781次浏览 961人参与
# 阿里云管培生offer #
120308次浏览 2220人参与
# 虾皮求职进展汇总 #
115819次浏览 886人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11607次浏览 288人参与
# 实习,投递多份简历没人回复怎么办 #
2454766次浏览 34858人参与
# 提前批简历挂麻了怎么办 #
149907次浏览 1977人参与
# 在找工作求抱抱 #
906050次浏览 9421人参与
# 如果公司给你放一天假,你会怎么度过? #
4759次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1195967次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157638次浏览 2267人参与
# 双非本科求职如何逆袭 #
662289次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12764次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35833次浏览 384人参与
# 简历中的项目经历要怎么写? #
86924次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20137次浏览 240人参与
# 我的上岸简历长这样 #
452024次浏览 8088人参与
牛客网
牛客企业服务