[秋招笔试]-百度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 陕西
牛客们,个人动态的offer选择,大家帮忙投下票!
点赞 回复 分享
发布于 2022-09-23 10:54 河南
第二题考虑奇偶性是不变的,不能都是奇数
点赞 回复 分享
发布于 2022-09-14 20:09 北京
点赞 回复 分享
发布于 2022-09-14 14:27 广东

相关推荐

07-11 19:33
门头沟学院 Java
你怎么知道我今天git本地代码覆盖了公司的仓库代码?以前一直以为技术岗技术为王,现在深刻认识到一个人的综合实力强才是真的强。实习日记,今天也是很深刻体会到为什么说技术岗的软实力也是很重要的一个因素。Monitor本来就讲话不是很清楚,我们同组实习生都在吐槽他,我后我又是第一次接触这个新的业务,我也是那种很喜欢刨根问底的人,所以很多时候跟monitor不在一个频道上面,导致一个需求需要沟通很久。我的思维习惯是接收概念,然后自己理解之后再立马去确认是否正确。有点类似于tcc。Monitor的思维习惯是他讲一个东西,喜欢延伸到很多很远的东西,很适合那种和人聊天,喝茶,高谈阔论的那种。有点类似于sagas。因为我完全没有接触过这方面的业务,所以他讲一个东西,对于我来说就是一个新的东西,新的概念。然后呢,他直接跟我讲一个事物的逻辑,然而我却想要马上确认一下这一个事物的逻辑,每一个概念分别是什么意思,有什么作用,在这个逻辑上面会起到什么作用。然后又因为我是新接触的,所以很多时候会有理解偏差,然后monitor就会觉得我怎么这都听不懂,然后又要重头再讲一遍,相当于我每确认一次概念,他都要从头把业务流程再讲一遍,我只能够等他讲完业务流程之后我再确认我的概念有没有正确形成一个这样子的一个循环。现在看来,我已经算是理解这个业务了。其实这件事情本来就挺简单的。技术实现也不难。但是就是涉及到一个人与人沟通的问题,你不能只是坚持你自己的一个思维习惯,你要去能包容人家的思维习惯,并且尝试从人家的思维习惯里面去推演出来一个模板模型。沟通也许算是一种软实力吧,能够很清楚的把事情给讲明白,讲的通俗易懂,一针见血。Monitor是那种比较系统性的就给我解释一些东西,我是我属于那种应用性的,我只在乎什么东西对我的这个业务实现是有用的,我就只管它,我以很多时候我觉得他讲不到重点,他觉得我理解有问题。虽然这是语音转文字,但是我也看出来其实我自己表达也有一些问题。唉,要好好研究一下表达的艺术了。然后我又是那种基本每天提早一小时到岗然后下班自愿无偿加班一两个小时的人,也许因此mt还算对我有点耐心吧。一想起几乎比我早进来的实习生基本都犯过git本地直接全部覆盖远程仓库代码的错误,我就感觉少一丝愧疚了。
来offer来oc:看到monitor还以为是八股文了
牛客在线求职答疑中心
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-29 14:02
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
08-15 17:35
点赞 评论 收藏
分享
评论
6
23
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务