360历年秋招笔试真题

如需获取完整资料,请点击下方链接领取《2024校招笔试真题秘籍》(实时更新中)

不收费,3人组团即可一块免费领取!限量免费10000个名额

手机端点击免费领取:https://www.nowcoder.com/link/campus_xzbs2

电脑端请扫码领取:

1、ab串

【题目描述】

小明得到一个只包含a,b两个字符的字符串,但是小明不希望在这个字符串里a出现在b左边。现在他可以将“ab”这样的子串替换成“bba”,在原串中的相对位置不变。输出小明最少需要操作多少次才能让一个给定字符串所有a都在b的右边。

输入描述:

一个只包含a,b字符的字符串,长度不超过100000。

输出描述:

最小的操作次数。结果对1000000007取模。

输入样例1:

ab

输出样例1:

1

说明1:

ab到bba

输入样例2:

aab

输出样例2:

3

说明2:

aab到abba到bbaba到bbbbaa

【解题思路】

从右往左做操作,每次操作后,操作位置左边所有的a其右边的b的数量相当于增加了。那么就从右往左遍历字符串,维护一下每次操作右边有多少个b即可,然后统计答案。

 

【参考代码】

#include <bits/stdc++.h>
using namespace std;
#define modo 1000000007
int main() {
    char s[1000005];
    scanf("%s", s + 1);
    int n = strlen(s + 1);
    long long ans = 0;
    long long b = 0;
    for (int i = n; i >= 1; i--) {
        if (s[i] == 'b')
            b++;
        else if (s[i] == 'a') {
            ans += b;
            b *= 2;
            ans %= modo;
            b %= modo;
        }
    }
    cout << ans << endl;
}

2、神枪手

【题目描述】

小马最近找到了一款打气球的游戏。

每一回合都会有n个气球,每个气球都有对应的分值,第i个气球的分值为ai。

这一回合内,会给小马两发子弹,但是由于小马的枪法不准,一发子弹最多只能打破一个气球,甚至小马可能一个气球都打不中。

现给出小马的得分规则:

1)若小马一只气球都没打中,记小马得0分。

2)若小马打中了第i只气球,记小马得ai分。

3)若小马打中了第i只气球和第j只气球(i<j),记小马得ai|aj分。

(其中 | 代表按位或,按位或的规则如下:

参加运算的两个数,按二进制位进行或运算,只要两个数中的一个为1,结果就为1。

即0|0-0,1|0=1,0|1=1,1|1=1.

例:2|4即00000010 | 00000100 = 00000110,所以2|4=6 )

现在请你计算所有情况下小马的得分之和。

输入描述:

第一行,一个整数n,表示此回合的气球数量。

第二行,用空格分开的n个整数,第i个整数为ai,表示每个气球对应的分值。

对于其中60%的数据,1≤n≤1000,1≤ai≤100000

对于另外40%的数据,1≤n≤50000,1≤ai≤100000

输出描述:

一行一个整数,代表所有情况下小马的得分之和。

输入样例:

3

1 2 3

输出样例:

15

【解题思路】

暴力解法:O(n^2)

所有情况有三种,

一个气球没打破,0分。

打破一个气球,枚举打破了哪个气球,O(n)。

打破两个气球,枚举打破了哪两个气球,O(n^2)。

因此总时间复杂度为 O(n^2)。

优化解法:O(n log |最大值| )

在二进制上考虑,按位计算。

我们求二进制下,得分的每一位,在【分数和】中共出现了多少次,计算出至少含有一次的次数,再乘以对应的二进制数,即为对答案的总贡献。

枚举二进制下的每一位,O(logn)。

枚举每个气球,O(n)。

因此总时间复杂度为 O(n logn)。

【参考代码】

#include <bits/stdc++.h>
using namespace std;
const int N = 200000 + 10;
int a[N], cnt[40];
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j <= 30; j++) {
            if ((1 << j) & a[i]) {
                cnt[j]++;
    

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024软件笔试真题+答案合集 文章被收录于专栏

本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题,内容中包含多个名企的笔试真题,附有题目思路及参考代码

全部评论

相关推荐

头像
10-13 18:10
已编辑
东南大学 C++
。收拾收拾心情下一家吧————————————————10.12更新上面不知道怎么的,每次在手机上编辑都会只有最后一行才会显示。原本不想写凉经的,太伤感情了,但过了一天想了想,凉经的拿起来好好整理,就像象棋一样,你进步最快的时候不是你赢棋的时候,而是在输棋的时候。那废话不多说,就做个复盘吧。一面:1,经典自我介绍2,项目盘问,没啥好说的,感觉问的不是很多3,八股问的比较奇怪,他会深挖性地问一些,比如,我知道MMU,那你知不知道QMMU(记得是这个,总之就是MMU前面加一个字母)4,知不知道slab内存分配器-&gt;这个我清楚5,知不知道排序算法,排序算法一般怎么用6,写一道力扣的,最长回文子串反问:1,工作内容2,工作强度3,关于友商的问题-&gt;后面这个问题问HR去了,和中兴有关,数通这个行业和友商相关的不要提,这个行业和别的行业不同,别的行业干同一行的都是竞争关系,数通这个行业的不同企业的关系比较微妙。特别细节的问题我确实不知道,但一面没挂我。接下来是我被挂的二面,先说说我挂在哪里,技术性问题我应该没啥问题,主要是一些解决问题思路上的回答,一方面是这方面我准备的不多,另一方面是这个面试写的是“专业面试二面”,但是感觉问的问题都是一些主管面/综合面才会问的问题,就是不问技术问方法论。我以前形成的思维定式就是专业面会就是会,不会就直说不会,但事实上如果问到方法论性质的问题的话得扯一下皮,不能按照上面这个模式。刚到位置上就看到面试官叹了一口气,有一些不详的预感。我是下午1点45左右面的。1,经典自我介绍2,你是怎么完成这个项目的,分成几个步骤。我大致说了一下。你有没有觉得你的步骤里面缺了一些什么,(这里已经在引导我往他想的那个方向走了),比如你一个人的能力永远是不够的,,,我们平时会有一些组内的会议来沟通我们的所思所想。。。。3,你在项目中遇到的最困难的地方在什么方面4,说一下你知道的TCP/IP协议网络模型中的网络层有关的协议......5,接着4问,你觉得现在的socket有什么样的缺点,有什么样的优化方向?6,中间手撕了一道很简单的快慢指针的问题。大概是在链表的倒数第N个位置插入一个节点。————————————————————————————————————10.13晚更新补充一下一面说的一些奇怪的概念:1,提到了RPC2,提到了fu(第四声)拷贝,我当时说我只知道零拷贝,知道mmap,然后他说mmap是其中的一种方式,然后他问我知不知道DPDK,我说不知道,他说这个是一个高性能的拷贝方式3,MMU这个前面加了一个什么字母我这里没记,别问我了4,后面还提到了LTU,VFIO,孩子真的不会。
走呀走:华子二面可能会有场景题的,是有些开放性的问题了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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