美团2024年春招第一场笔试【前端&移动端方向】 2024/12/10
1.编程题1-小美的平衡矩阵
小美拿到了一个𝑛∗𝑛的矩阵,其中每个元素是 0 或者 1。
小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。
现在,小美希望你回答有多少个𝑖∗𝑖的完美矩形区域。你需要回答1≤𝑖≤𝑛的所有答案。
cpp
#include <iostream>
using namespace std;
const int N=205;
int n;
int g[N][N],sum[N][N];//二维前缀和
int ans[N]; //存储i规模矩阵的数量
int main() {
cin>>n;
//读入数据注意是字符串的形式输入
for(int i=1;i<=n;i++){
string s;
cin>>s;
for(int j=1;j<=n;j++){
g[i][j]=s[j-1]-'0';
sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+g[i][j];
// cout<<sum[i][j]<<" ";
}
}
ans[1]=0;
for(int k=2;k<=n;k++){
//遍历所有可能的矩阵 左上角坐标确定就行
for(int i=1;i<=n-k+1;i++){
for(int j=1;j<=n-k+1;j++){
//如果0和1的数量一样多,说明sum值*2==k*k
int now=sum[i+k-1][j+k-1]-sum[i-1][j+k-1]-sum[i+k-1][j-1]+sum[i-1][j-1];
// cout<<i<<" "<<j<<""<<" "<<now<<endl;
ans[k]+=(now*2==k*k);
}
}
}
for(int i=1;i<=n;i++)
cout<<ans[i]<<endl;
return 0;
}
2.编程题2-小美的数组询问
小美拿到了一个由正整数组成的数组,但其中有一些元素是未知的(用 0 来表示)。
现在小美想知道,如果那些未知的元素在区间[𝑙,𝑟]范围内随机取值的话,数组所有元素之和的最小值和最大值分别是多少?共有𝑞次询问。
cpp
#include <iostream>
using namespace std;
int n,q,cnt;
long long sum,l,r;
int main() {
cin>>n>>q;
for(int i=0;i<n;i++){
int x;
cin>>x;
sum+=x;
cnt+=x==0;
}
while(q--){
cin>>l>>r;
cout<<sum+cnt*l<<" "<<sum+cnt*r<<endl;
}
return 0;
}
3.在计算机网络中,端口号的作用是什么?A
A.区分主机内不同进程
B.加密数据传输
C.确保数据完整性
D.控制数据流量
4.HTTPS协议通过使用哪些机制来确保通信的安全性(A)
A.加密和身份验证
B.压缩和缓存
C.路由和负载均衡
D.访问控制和权限管理
5.ETag用于标识资源的唯一标识符,它可以用于(A)
A.验证资源是否发生变化
B.控制缓存的过期时间
C.指定缓存的最大大小
D.加密缓存中的数据
6.在一个单道系统中,有4个作业P、Q、R和S,执行时间分别为2小时、4小时、6小时和8小时,P和Q同时在0时到达,R和S在2小时到达,采用短作业优先算法时,平均周转时间为(9小时)。
解析
注意一下周转时间等于完成时间-到达时间
7.系统中现有一个任务进程在11:30到达系统,如果在14:30开始运行这个任务进程,其运行时间为3小时,现求这个任务进程的响应比为(2)。
解析
响应比=(执行时间+等待时间)/执行时间
8.在一个物流管理系统中,需要一个功能来处理不同类型的货物运输请求,如陆运、空运或海运。该系统应能够根据运输类型的不同选择不同的处理策略。哪种设计模式最合适(策略模式)
解析
策略模式通过定义一系列算法(在这里是运输方式),封装每一个算法,并使它们可以相互替换,特别适合于有多种类似行为或策略的系统。
9.对关键码序列{9, 27, 18, 36, 45, 54, 63}进行堆排序,输出2个最大关键码后的剩余堆是({45, 36, 18, 9, 27})。
解析
考察大根堆的初始化构建和删除操作
初始化构建,首先从0开始给初始序列标注序号,根据[n/2]-1计算出初始需要调整位置的元素。
对每个考察的元素,检查它和孩子节点的情况并做调换。
删除操作,因为删除的都是最大值也就是根节点,要将最后一个元素替换到根节点,然后进行检查调整。
10.以下哪个设计模式主要用于在不改变原始类的情况下扩展其功能(装饰器模式)
解析
装饰器模式
定义
装饰器模式是一种结构型设计 模式,它允许你动态地给一个对象添加一些额外的职责(功能)。这种模式提供了一种灵活的替代继承的方式,可以通过组合来增强或改变对象的功能。
特点
- 动态扩展功能:可以在运行时扩展对象的功能,而不需要修改对象的结构。
- 多个装饰器可以组合使用:你可以组合多个装饰器来实现复杂的功能,这使得功能扩展更为灵活。
- 遵循单一职责原则:将功能的实现与功能的扩展分开,符合面向对象设计的原则。
适用场景
- 需要动态扩展功能的场景。
- 当功能需要组合时。
工厂模式
定义
工厂模式是一种创建型设计 模式,它提供了一个创建对象的接口,但让子类决定要实例化的类。工厂模式将对象的实例化推迟到子类中。工厂模式有多种变体,如简单工厂、工厂方法和抽象工厂。
特点
- 解耦:客户端的代码不需要了解实现类的具体细节(即类的创建由工厂来处理)。
- 易于扩展:可以通过新建工厂类轻松添加新类型的产品,而不需要修改现有代码。
- 适用于创建复杂对象:可以对对象在构建期间进行更复杂的设置。
适用场景
- 当一个类不知道它所需对象的类型时。
- 当一个类希望通过子类来决定要实例化的对象时。
11.设哈希表长m=10,有一堆数据元素,关键字分别为{14, 25, 36, 47, 58, 69, 80},按照哈希函数为H(key)=key%10,如用线性探测法处理冲突,求关键字90填装的哈希表位置的序号是(1)。
12.在一颗深度为8的完全二叉树中,最少可以有多少个结点,最多可以有多少个结点?(128,255)
13. 14,19,30,47,70,( 99 )
解析
根据题干可发现规律:做差后得到新数列为:5、11、17、23、(29),为公差是6的等差数列,则所求项应=70+29=99.
14.在编译器的目标代码生成阶段,以下哪个不是优化的主要目标是(D)
A.降低程序的功耗
B.减小目标代码的体积
C.提高目标代码的执行效率
D.减少程序的编译时间
15.若入栈序列为1, 3, 5, 2, 4, 6,且进栈和出栈可以穿插进行,则不可能的输出序列为(B)。
A.1, 3, 5, 2, 4, 6
B.1, 3, 6, 2, 5, 4
C.1, 3, 5, 4, 2, 6
D.1, 3, 5, 4, 6, 2
16.在一个农场里,有鸽子和羊。鸽子2条腿2个翅膀,羊4条腿0个翅膀,它们的总数是20,总共有64条腿和16个翅膀。请问鸽子和羊各有多少只?8、12
17.在用KMP算法进行模式匹配时,若是指向模式串"mnopmn"的指针在指到第5个字符"m"时发生失配,则指针回溯的位置为(1)。
注:字符串中字符从字符数据1号位开始存储,也即从1开始编号。
解析
在KMP算法中,如果在模式串中发生了失配,指向模式串的指针会根据next数组进行回溯
next 数组记录了模式串中每个前缀的最长相等前后缀的长度。
下面是计算 next 数组的详细步骤:
- 对于模式串
P
,next[i]
表示模式串P
从位置1
到i
的子串(包含位置i
)中,最长的相等前后缀的长度。
-
初始化
next
数组和一些指针:next[1] = 0
(因为长度为1的子串,没有前后缀)j = 0
(指向前缀位置)
-
遍历模式串,从第 2 个字符开始计算
next
数组(因为next[1]
已经初始化):-
当
P[i] == P[j]
:- 增加
j
的值,然后将next[i]
设为当前的j
。 - 继续比较下一个字符。
- 增加
-
当
P[i] != P[j]
:- 如果
j != 0
,则将j
设为next[j]
,回溯到前一个相同前缀的位置,继续比较。 - 如果
j == 0
,则将next[i]
设为 0,继续比较下一个字符。
- 如果
-
以模式串 "ababaca"
为例,计算其 next
数组:
- 初始化:
next[1] = 0
- 计算步骤:
i = 2
(P[2] = 'b'
,P[0] = 'a'
) → 不相等,next[2] = 0
,j = 0
i = 3
(P[3] = 'a'
,P[0] = 'a'
) → 相等,j = 1
,next[3] = 1
i = 4
(P[4] = 'b'
,P[1] = 'b'
) → 相等,j = 2
,next[4] = 2
i = 5
(P[5] = 'c'
,P[2] = 'a'
) → 不相等,j = next[2] = 0
, 不相等,next[5] = 0
i = 6
(P[6] = 'a'
,P[0] = 'a'
) → 相等,j = 1
,next[6] = 1
所以这道题根据上面的方法,得到next数组为
[0,0,0,0,1,2] 所以当第五个元素匹配失败时,要回溯到next[5]=1,也就是序号为1的元素。
18.代码需要经过一系列步骤编译成机器指令,根据完成任务不同,可以将编译器的组成部分划分为前端与后端。下列选项是编译器前端在编译源程序时编译的顺序,正确的是(A)
A.词法分析器->语法分析器->中间代码生成器
B.语法分析器->词法分析器->中间代码生成器
C.词法分析器->中间代码生成器->语法分析器
D.语法分析器->中间代码生成器->词法分析器
19.不同的数据存放区存放的数据和对应的管理方法是不同的。对于某些数据,如果在编译期间就可以确定数据对象的大小和数据对象的数目,在编译期间为数据对象分配存储空间,这些数据对应的存储分配策略是(D)
A.栈式存储分配
B.堆式存储分配
C.动态存储分配
D.静态存储分配
解析
本题考察运行时环境。
数据区可以分为静态数据区和动态数据区,动态数据区可以分为堆区和栈区。静态存储区、堆区和栈区的存储空间分配对应三种不同的策略,分别是静态存储分配、堆式存储分配以及栈式存储分配。
静态数据区对应的静态存储分配在编译期间为数据对象分配存储空间,这要求编译期间就可以确定数据对象的大小和数据对象的数目
当数据的生存期与创建它的函数执行期无关时,比如某些数据可能在函数执行以后长期存在,堆式存储分配是一种灵活的存储方式,但缺点是代价可能比较昂贵。
栈式存储分配通常用于可动态嵌套的程序结构,如过程、函数以及可嵌套程序块等,栈式存储分配将数据对象的运行存储按照栈的方式来管理
20.下图属于哪种设计模式?模版方法模式
解析
将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现
21. 6,11,18,29,46,( 71 )
22. 243,272,329,423,( 452 )
解析
根据题干可发现规律:数列的后一项为前一项的值 加上个、十、百位的数的平方的和,因此最后一项为423+29=452
23. 5,12,19,33,54,( 89 )
解析
根据题干可发现规律:数列的相邻两项的差构成一个斐波那契数列:12-5=7,19-12=7,33-19=14,54-23=21,因此最后一项为54+35=89
24. 34,31,-40,-67,-14,( 257 )
解析
根据题干可发现规律:X = (-1)^n * Xn-1 + 3^n-1,原数列各项可写成:31 =(-1)^2 × 34 - 3^1;-40 =(-1)^3 × 31 - 3^2;-67 =(-1)^4 × (-40) - 3^3;-14 =(-1)^5 × (-67) - 3^4;257 =(-1)^6 × (-14) - 3^5
25.某公司工程师占公司总人数的60%,设计师占公司总人数的30%,工程师比设计师多150人。问该公司总人数有多少人(500)。
26.某公司员工中,销售人员占总人数的30%,技术人员占总人数的40%,销售人员比技术人员少150人。问该公司总人数有多少人?1500
27.某硬盘有240个磁道(最外侧磁道号为0),磁道访问请求序列为30, 60, 90, 120, 190, 150, 220,当前磁头位于第180号磁道并从外侧向内侧移动。按照SCAN调度(电梯调度)方法处理完上述请求后,磁头移过的磁道数是(230)。
28.某学校图书馆在一学期内共借出了524本图书,问该学期最繁忙的月份至少借出了多少本图书。44
解析
524/12=43.667,所以最繁忙的月必然要大于等于平均值
29.一家餐厅采购了一批食材,如果每天消耗3kg,则比原计划提前两天用完,如果每天消耗2kg,则能比原计划多用两天。请问这批食材有( 24 )kg。
30.下列选项中只要其中一个表中存在匹配,则返回行的SQL JOIN的 类型是(D)。
A.INNER JOIN
B.LEFT JOIN
C.RIGHT JOIN
D.FULL JOIN
31.下列哪些运算不会排序(D)
A.GROUP BY子句
B.ORDER BY子句
C.聚合函数(SUM、COUNT、AVG、MAX、MIN)
D.BETWEEN
解析
GROUP BY子句、ORDER BY子句和聚合函数、DISTINCT、集合运算符(UINION、EXCEPT)以及窗口函数都是会进行排序的运算