【备战春招必看】美团2025届春招第10套笔试解析 | 大厂真题通关指南
✅ 春招备战指南 ✅
💡 学习建议:
- 先尝试独立解题(建议用时:90分钟/套)
- 对照解析查漏补缺
- 配套练习题库
互联网必备刷题宝典🔗
📢 美团技术岗笔试重要信息速览
⏰ 笔试时间安排
- 常规场次:每周六交替进行
- 上午场 10:00~11:30
- 晚间场 19:00~20:30
- 通知时间:每周四/五通过邮箱发送考试链接
🧩 笔试题型分布
算法岗 | 选择题 + 5道编程 |
后端开发岗 | 选择题 + 3道编程 |
前端/测试岗 | 选择题 + 2道编程 |
⚙️ 考试设置要点
- 考试平台:牛客网(ACM模式)
- 监考要求:
- 必须开启笔记本前置摄像头
- 禁止使用手机(需小程序锁定)
- 允许使用本地IDE
- 编程规范:
- 严格遵循输入输出格式
- 注意时间复杂度控制(通常1s对应1e8次运算)
📚 笔试经验贴
(所有展示题面均已进行改编处理,保留核心考点)
本题库收录整理自:
- 互联网公开的笔试真题回忆版(经网友投稿)
- 各大技术社区公开讨论的经典题型
- 历年校招考生提供的解题思路
🔍 题库特点:
- 100%真实笔试场景还原
- 包含高频考点题型
- 提供多语言实现参考
- 持续更新2024届最新真题
⚠️ 注意事项:
- 所有题目均来自公开渠道,已进行改编脱敏处理
- 实际笔试可能出现题型变化,请以官方通知为准
🚀 春招备战指南
金三银四求职季即将到来!这里整理了最新美团真题及解析,助你快速掌握笔试套路。建议重点突破以下题型:
- 数组/字符串操作
- 树形结构应用
- 贪心/动态规划
- 区间合并问题
(👇 下附最新笔试真题及详细解析 👇)
真题详解(改编版)
第一题:名字统计
题目内容
小基在整理同学名单时,发现混入了一些非人名的单词。已知人名单词必须以大写字母开头,请统计有效人名的数量。
输入描述
输入一个由大小写字母和空格组成的字符串 (
),单词间用空格分隔,且字符串首尾不含空格。
输出描述
输出有效人名的数量。
样例1
输入:
ABC abc Abc
输出:
2
样例2
输入:
A A c
输出:
2
题解
这道题的关键是判断每个单词的首字母是否为大写。将输入字符串按空格分割后,遍历每个单词检查首字母即可。
时间复杂度:,其中
是字符串长度。分割字符串和遍历单词的时间复杂度都是线性的。 空间复杂度:
,存储分割后的单词数组。
三语言参考代码
- C++
#include <iostream>
#include <sstream>
using namespace std;
int main() {
string s;
getline(cin, s);
istringstream iss(s);
string word;
int count = 0;
while(iss >> word) {
if(word[0] >= 'A' && word[0] <= 'Z') {
count++;
}
}
cout << count << endl;
return 0;
}
- Python
s = input().split()
count = sum(1 for word in s if word and word[0].isupper())
print(count)
- Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] words = sc.nextLine().split(" ");
int count = 0;
for(String word : words) {
if(!word.isEmpty() && Character.isUpperCase(word.charAt(0))) {
count++;
}
}
System.out.println(count);
}
}
第二题:最短种树区间
题目内容
小柯需要安排 位工人在无限长的公路上种树。每位工人从自己的位置开始向右种树,要求所有工人种树区间长度相同。求满足至少
棵树的情况下,最短的种树区间长度。
输入描述
第一行输入两个整数 和
(
)。 第二行输入
个整数
(
),表示工人位置。
输出描述
输出满足条件的最小区间长度。
样例1
输入:
3 6
1 2 5
输出:
3
题解
使用二分法确定最小种树长度。对于每个候选长度,计算总种树数是否满足要求。
时间复杂度:,二分次数为
,每次检查需要
时间。 空间复杂度:
,存储工人位置。
三语言参考代码
- C++
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> pos(n);
for(int i=0; i<n; i++) cin >> pos[i];
sort(pos.begin(), pos.end());
int l=1, r=2e9;
while(l < r) {
int mid = l + (r-l)/2;
long long cnt=0, last=-1e18;
for(int p : pos) {
long long start = max(last+1, (long long)p);
long long end = p + mid -1;
if(start > end) continue;
cnt += end - start +1;
last = end;
}
if(cnt >= k) r=mid;
else l=mid+1;
}
cout << l << endl;
}
- Python
n, k = map(int, input().split())
pos = sorted(list(map(int, input().split())))
def check(m):
cnt = last = 0
for p in pos:
start = max(last +1, p)
end = p + m -1
if start > end: continue
cnt += end - start +1
last = end
return cnt >=k
l, r = 1, 2*10**18
while l < r:
mid = (l + r) //2
if check(mid): r=mid
else: l=mid+1
print(l)
- Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), k = sc.nextInt();
int[] pos = new int[n];
for(int i=0; i<n; i++) pos[i] = sc.nextInt();
Arrays.sort(pos);
long l=1, r=(long)2e18;
while(l < r) {
long mid = (l + r)/2;
long cnt=0, last=Long.MIN_VALUE;
for(int p : pos) {
long start = Math.max(last+1, p);
long end = p + mid -1;
if(start > end) continue;
cnt += end - start +1;
last = end;
}
if(cnt >= k) r=mid;
else l=mid+1;
}
System.out.println(l);
}
}
第三题:区间博弈
题目内容
小兰和小柯在数组上进行博弈。每轮给定区间 ,小柯先选一个数,小兰扩展区间后选另一个数,较大者胜。求每轮结果及最小扩展长度。
输入描述
第一行输入 和
(
)。 第二行输入数组
。 接下来
行每行两个整数
。
输出描述
每轮输出结果(win/draw/lose)及最小扩展长度。
样例1
输入:
6 2
1 1 4 5 1 4
1 3
4 4
输出:
win
4
lose
2
题解
- 预处理区间最大值及其位置
- 使用单调栈预处理每个元素左右第一个更大值的位置
- 根据最大值出现次数判断胜负
- 计算最小扩展长度
时间复杂度: 空间复杂度:
三语言参考代码
- C++
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5+5;
int a[MAXN], lg[MAXN], st[MAXN][20], L[MAXN], R[MAXN];
vector<int> max_pos;
void build_st(int n) {
for(int i=2; i<=n; i++) lg[i] = lg[i/2]+1;
for(int j=1; (1<<j)<=n; j++)
for(int i=1; i+(1<<j)-1<=n; i++) {
int x = st[i][j-1], y = st[i+(1<<(j-1))][j-1];
st[i][j] = a[x]>=a[y] ? x : y;
}
}
int query_max(int l, int r) {
int k = lg[r-l+1];
int x = st[l][k], y = st[r-(1<<k)+1][k];
return a[x]>=a[y] ? x : y;
}
void preprocess(int n) {
stack<int> s;
for(int i=1; i<=n; i++) {
while(!s.empty() && a[s.top()] < a[i]) s.pop();
L[i] = s.empty() ? 0 : s.top();
s.push(i);
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力