[秋招笔试]-百度2023秋招研发A卷

百度2023秋招研发A卷

​ 用的是牛客的系统,不知道是我这边电脑和网络的问题,还是牛客系统的问题,我刚开始做选择题的时候,一会卡的点不动选项,一会是摄像头异常(只能退出重进),笔试过程中还接了登临HR的电话,约了一个面试的时间,反正我选择题的时候,问题百出,我退出系统重进都有三次了,也浪费了一些时间,应该会被记录下来吧【不过,我坦然了,据今年入职的应届生说,百度那边试用期六个月,转正名额都不多,今年秋招hc可想而知】。选择题的范围很广,SQL也有,计组也有,反正范围比较广,我记得还有两道是关于Spark,emmm....我是做编译器的,接触都是C和linux的东东,我都不知道这是个啥东西。题型的话,是15道单选,5道多选,3个编程题。

第一题 百度型字符串

小红拿到了一个字符串,她想知道有多少个"baidu"型子串?所谓"baidu"型字符串,指第1个、第4个字母是辅音,第2、3、5个字来是元音,且每个字母都不相同的字符串。例如,"taigu"、"huida"、"paobu"、"baoli"等都是"baidu"型字符串。

我们定义,元音字母仅有'a'、 'e'、'i'、 'o'、'u'这五种,其余字母均为辅字母。

输入描述:

一个仅由小写字母组成的字符串,长度不超过200000。

输出描述:

"baidu"型子串的数量。

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入
baiduoxiaojiabankanjiaran
输出
2
说明

共有"baidu"和"duoxi"这两个baidu型字符串。请注意,"jiaba"和"jiara"并不是baidu型字符串,因为都出现了两个'a '。

我的题解
#include <bits/stdc++.h>

using namespace std;

int main()
{
    // freopen("in.txt", "r", stdin);
    string str;
    cin >> str;
    unsigned int cnt = 0;
    int st = 0;
    int i = 0;
    while (st + i < str.size())
    {
        // 先判断有没有重复的字符
        if (st + 5 < str.size())
        {
            if (count(str.begin() + st, str.begin() + st + 5, str[st + i]) != 1)
            {
                // cout << "有重复性字符" << endl;
                st++;
                i = 0;
                continue;
            }
        }
        else
        {
            if (count(str.begin() + st, str.end(), str[st + i]) != 1)
            {
                // cout << "有重复性字符" << endl;
                st++;
                i = 0;
                continue;
            }
        }
        // 说明该字符不重复
        if (i == 1 || i == 2)
        {
            if (!(str[st + i] == 'a' || str[st + i] == 'e' || str[st + i] == 'i' || str[st + i] == 'o' || str[st + i] == 'u'))
            {
                st++;
                i = 0;
                continue;
            }
        }
        else if (i == 0 || i == 3)
        {
            if (str[st + i] == 'a' || str[st + i] == 'e' || str[st + i] == 'i' || str[st + i] == 'o' || str[st + i] == 'u')
            {
                st++;
                i = 0;
                continue;
            }
        }

        // 如果是第5个字符了
        if (i == 4)
        {
            if (str[st + i] == 'a' || str[st + i] == 'e' || str[st + i] == 'i' || str[st + i] == 'o' || str[st + i] == 'u')
            {
                cnt++;
                st++;
                i = 0;
            }
            else
            {
                st++;
                i = 0;
            }
        }
        else
        {
            i++;
        }
    }
    cout << cnt << endl;
    return 0;
}

我是根据字面意思判断的,st代表当前字符串的起始位置,i指示当前字符串的位置,范围是0到4。全部AC了,但是因为刚开始没仔细看题目,中间改动了挺多,浪费了一些时间。

第二题 反转01串

小红拿到了一个01串,她每次可以选择一个长度为2的连续子串取反(0变1,1变0),她想知道,是否能在有限的操作次数内使得所有字符相同?
共有q组询问。

输入描述:

第一行输入一个正整数q,代表询问次数。
每次询问输入一个字符串,仅由'0'和'1'组成。所有字符串长度之和不超过200000。

输出描述:

对于每次询问,如果该字符串可以通过有限的操作使得所有字符相同,则输出"Yes",否则输出"No"。

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入
3
101
1111
1011
输出
Yes
Yes
No
说明

第一组询问,先对前两个字符操作,交成"011",然后对后两个字符操作,变成"000"。
第二组询问,不需要任何操作。
第三组询问,显然无法通过有效的操作次效使得所有字符相等。

我的题解
#include<bits/stdc++.h>

using namespace std;

int main(){
    // freopen("in.txt", "r", stdin);
    int t;
    string str;
    cin >> t;
    while(t--){
        cin >> str;
        int zero=count(str.begin(), str.end(), '0');
        int one=count(str.begin(), str.end(), '1');
        if( zero %2==0 || one %2 ==0)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
    return 0;
}

看到题目第一眼就感觉和牛客上之前做的百度的笔试题有点类似,比如:最小值_百度笔试题_牛客网 (nowcoder.com)最小公倍数与最大公约数_百度笔试题_牛客网 (nowcoder.com),更多的是考察数学和逻辑而不是编程。所以当时立马就觉得和字符串中0和1的个数有关,仔细思考,可以有以下结论:取反操作可以实现对任意偶数个0或1取反( 因为通过若干次操作,可以达到【同时翻转任意两个位置的字符】的效果。具体做法:要想交换第 i 和 j 位(i < j)的字符,只需要依次将 i 和 i+1、i+1和i+2、...、j-1和j交换即可。途中只有 i 和 j 两个数字反转了一次,其余数字反转了2次所以没有变化)。因此,只要字符串中 0或1的数量为偶数即可。

做的时候时间就剩几分钟,我直接在网页上写的,结果我错把count写成了find........,刚写完,还没调试就自动提交了,然后我发现count写错了,emmmm,别提多难受了

第三题 字符矩阵最小移动步数

小红拿到了一个字符矩阵,矩阵仅由'r、'e'、'd'三种字符组成。她初始站在左上角,每次可以走到一个相邻的字符上(每个字符上、下、左、右最多4个相邻)。但有个限制,小红不能从'r走到d',从'e'走到r' ,从'd'走到e',其他情况都能走。
小红想知道,从左上角走到右下角至少需要多少步?

输入描述:

第一行输入两个正整数n和m,代表矩阵的行数和列数。
接下来的n行,每行输入一个长度为m的字符串,用来表示矩阵。
1≤n, m ≤500

输出描述:

如果小红无法到达右下角,则输出-1。
否则输出一个整数,代表小红的最少移动步数。

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入
3 3
red
der
rdr
输出
4
说明

小红可以走r →e →e → d →r,共需要移动4步。

我的题解:

额,没做到这一题,就只是单纯截图记录了一下题目。后续有时间补充一下,最近面试多,顾不上.....

其他大佬的题解:

https://www.nowcoder.com/discuss/1049972

https://www.nowcoder.com/discuss/1049863

其他牛友的题目截图链接:

https://www.nowcoder.com/feed/main/detail/b9e81a556d4d49ac976aaefbbff84c50

#百度笔试##百度秋招##百度23秋招笔试编程题有点儿简单啊#
全部评论
之前没见过第二题,考试的时候想破脑袋都没整明白
1 回复 分享
发布于 2022-09-14 17:07 陕西
点赞 回复 分享
发布于 2022-09-14 14:27 广东
第二题考虑奇偶性是不变的,不能都是奇数
点赞 回复 分享
发布于 2022-09-14 20:09 北京
牛客们,个人动态的offer选择,大家帮忙投下票!
点赞 回复 分享
发布于 2022-09-23 10:54 河南

相关推荐

10-29 11:50
东北大学 C++
分布式缓存,你的分布式key是怎么分桶的?分桶规则是什么?节点的增减会不会影响你的数据分布?有没有主节点?没有主节点来管理整个数据的一个分布规则,如果有一个节点挂了,客户端怎么感知的?假设正在请求中,down了一个节点,比如原来5个down之后变成4个,那这个时候你请求的有部分数据,它的数据分布就变了,你的客户端怎么知道这个事情?怎么会路由到其他节点上去呢?你这个数据可能正在迁移,你数据正在迁移,假设你的第五个节点宕机了,那么你的第五个节点的数据从哪里取出来?你这个节点宕机了,其他节点怎么拿到他这个宕机的数据?相当于你存的节点的数据在数据库都有?缓存有副本吗?平时都建议把C++模板类的实现,放到头文件中,基于什么考虑?C++一个虚函数可以定义成模板函数吗?如果我在一个头文件中定义一个函数,这里会有什么问题吗?一个类的大小有什么有关?如果一个类本身有一个虚函数,再加一个虚函数它的大小怎么变化?unordered_map和map的区别有unordered_map查找时间复杂度是O(1),既然有基于哈希表的map,为什么还要有基于红黑树的map?解决哈希冲突的一些方法C++三种智能指针unique_ptr怎么做到的单独拥有一块内存,而不是和别人共享一块内存?手撕:字符串相乘,没撕出来,挂
腾讯一面1582人在聊 查看17道真题和解析
点赞 评论 收藏
分享
6 23 评论
分享
牛客网
牛客企业服务