8.25b站后端笔试(纪念一下人生第一次全AK)

1.每行都出现的最小数字
因为每行都严格递增,所以就map统计每个数字出现次数

#include<bits/stdc++.h>
using namespace std;
int main()
{
   string s;
   map<int,int>mp;
   int lines=0;
   while(getline(cin,s))
   {
       if(s.size()==0)break;
       s+=',';
       lines++;
       int num=0;
       for(int i=0;i<s.size();i++)
       {
           if(isdigit(s[i]))num=num*10+s[i]-'0';
           else if(s[i]==',')
           {
               mp[num]++;
               num=0;
           }
       }
   }
   bool flag=false;
   for(auto& n:mp)
   {
       if(n.second==lines)
       {
           flag=true;
           cout<<n.first<<endl;
           break;
       }
   }
   if(flag==false)cout<<-1<<endl;
}

2.人群数量
dfs递归将连通的1清零,记人群数+1

#include<bits/stdc++.h>
using namespace std;
void dfs(vector<vector<int>>& v,int i,int j)
{
    if(i>=v.size() || j>=v[0].size() || i<0 || j<0 || v[i][j]==0)return;//边界条件
    else v[i][j]=0;
    dfs(v,i,j+1);//右移
    dfs(v,i+1,j);//下移
    dfs(v,i,j-1);//左移
    dfs(v,i-1,j);//上移
    return;
}
int main()
{
    string s;
    vector<vector<int>>v;
    while(getline(cin,s))
    {
        if(s.size()==0)break;
        int num=0;
        vector<int>tmp;
        for(int i=0;i<s.size();i++)
        {
            if(isdigit(s[i]))tmp.push_back(s[i]-'0');
        }
        v.push_back(tmp);
    }
    int res=0;
    for(int i=0;i<v.size();i++)
    {
        for(int j=0;j<v[0].size();j++)
        {
            if(v[i][j]==1){dfs(v,i,j);res++;}//人群数+1
        }
    }
    cout<<res<<endl;
}
#笔经##哔哩哔哩#
全部评论
2题和我都不一样的题目欸
点赞 回复 分享
发布于 2021-08-25 20:40
你第一题和我不一样😂
点赞 回复 分享
发布于 2021-08-25 20:43
大佬,为啥dfs只需要右移,下移, leetcode的岛屿问题都需要四个方向移动啊
点赞 回复 分享
发布于 2021-08-25 21:20
大佬有收到面试消息吗
点赞 回复 分享
发布于 2021-08-28 16:23
我也是b站笔试人生第一次ak然而一点后续都没有😢
点赞 回复 分享
发布于 2021-09-01 18:51

相关推荐

评论
2
3
分享

创作者周榜

更多
牛客网
牛客企业服务