【备战春招必看】美团2025届春招第2套笔试解析 | 大厂真题通关指南

✅ 春招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题(建议用时:90分钟/套)
  • 对照解析查漏补缺
  • 配套练习题库

互联网必备刷题宝典🔗

📢 美团技术岗笔试重要信息速览

⏰ 笔试时间安排

  • 常规场次:每周六交替进行
    • 上午场 10:00~11:30
    • 晚间场 19:00~20:30
  • 通知时间:每周四/五通过邮箱发送考试链接

🧩 笔试题型分布

岗位类型 题目构成
算法岗 选择题 + 5道编程
后端开发岗 选择题 + 3道编程
前端/测试岗 选择题 + 2道编程

⚙️ 考试设置要点

  • 考试平台:牛客网(ACM模式)
  • 监考要求
    • 必须开启笔记本前置摄像头
    • 禁止使用手机(需小程序锁定)
    • 允许使用本地IDE
  • 编程规范
    • 严格遵循输入输出格式
    • 注意时间复杂度控制(通常1s对应1e8次运算)

📚 笔试经验贴

(所有展示题面均已进行改编处理,保留核心考点)

本题库收录整理自:

  1. 互联网公开的笔试真题回忆版(经网友投稿)
  2. 各大技术社区公开讨论的经典题型
  3. 历年校招考生提供的解题思路

🔍 题库特点:

  • 100%真实笔试场景还原
  • 包含高频考点题型
  • 提供多语言实现参考
  • 持续更新2024届最新真题

⚠️ 注意事项:

  1. 所有题目均来自公开渠道,已进行改编脱敏处理
  2. 实际笔试可能出现题型变化,请以官方通知为准

🚀 春招备战指南

金三银四求职季即将到来!这里整理了最新美团真题及解析,助你快速掌握笔试套路。建议重点突破以下题型:

  1. 数组/字符串操作
  2. 树形结构应用
  3. 贪心/动态规划
  4. 区间合并问题

(👇 下附最新笔试真题及详细解析 👇)

真题详解(改编版)

T1 外卖订单

题目描述

小基是美团外卖的忠实用户,他经常去美团外卖 app 上面点外卖,因为会员红包的性价比太高。现在小基点了若干道菜,他希望你计算一个订单的总价。你能帮帮他吗?

输入描述

第一行输入一个正整数 ,代表菜品总数。

第二行输入 个正整数 ,代表每道菜的价格。

第三行输入两个正整数 代表满减的价格, 代表红包的价格。

输出描述

一个正整数,代表小基最终应付的钱数。

样例1

输入:

4
10 20 10 20
25 10

输出:

25

说明:四个菜一共 60 元,满减减掉了 25 元,再用一个 10 元的红包,因此需要付 25 元。

题解

这是一道简单的模拟题,主要考察基本的数学运算。

解题思路如下:

  1. 首先读取所有菜品的价格并求和,得到总价。
  2. 从总价中减去满减金额。
  3. 再减去红包金额。
  4. 输出最终结果。

关键点:

  • 使用 sum() 函数可以快速求出菜品总价
  • 最终价格就是:总价 - 满减 - 红包

时间复杂度:,其中 是菜品数量。主要时间花在读取和求和上。

参考代码

C++:

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int sum = 0;
    for(int i = 0; i < n; i++) {
        int price;
        cin >> price;
        sum += price;
    }
    int x, y;
    cin >> x >> y;
    cout << sum - x - y << endl;
    return 0;
}

Python:

n = int(input())
w = list(map(int, input().split()))
x, y = map(int, input().split())
cost = sum(w)
print(cost - x - y)

Java:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int sum = 0;
        for(int i = 0; i < n; i++) {
            sum += sc.nextInt();
        }
        int x = sc.nextInt();
        int y = sc.nextInt();
        System.out.println(sum - x - y);
    }
}

T2 字符串规范化

题目描述

小基定义以下三种单词是合法的:

  1. 所有字母都是小写。例如:good。
  2. 所有字母都是大写。例如:APP。
  3. 第一个字母大写,后面所有字母都是小写。例如:Alice。

现在小基拿到了一个单词,他每次操作可以修改任意一个字符的大小写。小基想知道最少操作几次可以使得单词变成合法的?

输入描述

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

输出描述

一个整数,代表操作的最小次数。

样例1

输入:

AbC

输出:

1

说明:变成 ABC 或者 Abc 均可。只需要 1 次操作。

题解

这道题需要考虑三种合法情况,分别计算达到每种情况需要的最小操作次数。

解题思路:

  1. 统计字符串中大写字母和小写字母的数量。
  2. 考虑三种合法情况:
    • 全部变成小写:需要修改的次数是大写字母的数量
    • 全部变成大写:需要修改的次数是小写字母的数量
    • 首字母大写其余小写:需要考虑首字母是否需要修改,以及其余字母变成小写需要的修改次数
  3. 取三种情况中的最小值。

时间复杂度:,其中 是字符串长度。

参考代码

C++:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string s;
    cin >> s;
    int upper = 0, lower = 0;
    for(char c : s) {
        if(isupper(c)) upper++;
        else lower++;
    }
    int n = s.size();
    int ans = min(upper, lower); // 全部变成一种情况
    
    // 首字母大写,其余小写
    int firstCase = (islower(s[0]) ? 1 : 0) + upper - (isupper(s[0]) ? 1 : 0);
    ans = min(ans, firstCase);
    
    cout << ans << endl;
    return 0;
}

Python:

s = input()
upper = sum(1 for c in s if c.isupper())
lower = len(s) - upper

ans = min(upper, lower)  # 全部变成一种情况
# 首字母大写,其余小写
first_case = (s[0].islower()) + upper - (s[0].isupper())
ans = min(ans, first_case)

print(ans)

Java:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int upper = 0, lower = 0;
        
        for(char c : s.toCharArray()) {
            if(Character.isUpperCase(c)) upper++;
            else lower++;
        }
        
        int n = s.length();
        int ans = Math.min(upper, lower);
        
        // 首字母大写,其余小写
        int firstCase = (Character.isLowerCase(s.charAt(0)) ? 1 : 0) + 
                       upper - (Character.isUpperCase(s.charAt(0)) ? 1 : 0);
        ans = Math.min(ans, firstCase);
        
        System.out.println(ans);
    }
}

T3 数组翻倍

题目描述

小基拿到了一个数组,他每次操作会将除了第 个元素的其余元素翻倍,一共操作了 次。请你帮小基计算操作结束后所有元素之和。由于答案过大,请对 取模。

输入描述

第一行输入两个正整数 , ,代表数组的大小和操作次数。

第二行输入 个正整数 ,代表数组的元素。

接下来的 行,每行输入一个正整数 ,代表第 次操作未被翻倍的元素。

数据范围:

输出描述

一个整数,代表操作结束后所有元素之和模 的值。

样例1

输入:

4 2
1 2 3 4
1
2

输出:

34

题解

这道题的关键是理解每个元素被翻倍的次数。

解题思路:

  1. 对于每个位置,初始翻倍次数为操作总次数
  2. 当某个位置被指定为不翻倍时,该位置的翻倍次数减1。
  3. 使用快速幂计算每个位置最终的值:
  4. 所有位置的值求和并取模。

时间复杂度:,其中快速幂的复杂度是

参考代码

C++:

#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;

long long quick_pow(long long a, long long b) {
    long long res = 1;
    while(b) {
        if(b & 1) res = res * a % MOD;
        a = a * a % MOD;
        b >>= 1;
    }
    return res;
}

int main() {
    int n, q;
    cin >> n >> q;
    vector<int> a(n);
    for(int i = 0; i < n; i++) cin >> a[i];
    
    vector<int> cnt(n, q);
    for(int i = 0; i < q; i++) {
        int x;
        cin >> x;
        cnt[x-1]--;
    }
    
    long long ans = 0;
    for(int i = 0; i < n; i++) {
        ans = (ans + a[i] * quick_pow(2, cnt[i])) % MOD;
    }
    cout << ans << endl;
    return 0;
}

Python:

MOD = 10**9 + 7
n, q = map(int, input().split())
a = list(map(int, input().split()))
cnt = [q] * n

for _ in range(q):
    x = int(input())
    cnt[x-1] -= 1

ans = 0
for i in range(n):
    ans = (ans + a[i] * pow(2, cnt[i], MOD)) % MOD
prin

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

互联网刷题笔试宝典 文章被收录于专栏

互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力

全部评论

相关推荐

不愿透露姓名的神秘牛友
04-25 10:45
点赞 评论 收藏
分享
评论
4
6
分享

创作者周榜

更多
牛客网
牛客企业服务