首页 > 8.25b站后端笔试(纪念一下人生第一次全AK)
头像
hlh要offer
编辑于 2021-08-26 10:18
+ 关注

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;
}

全部评论

(5) 回帖
加载中...
话题 回帖