小米笔试 小米笔试题 小米0321春招实习笔试真题

笔试时间:2026年3月21日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:年会套圈

题目

小明在年会时得到了一次套圈机会,只要被小明套中的商品都可以全部送给小明。小明对每个商品都有一个喜好值 a_i。小明的套圈技术十分精准,可以指哪套哪,请你帮小明决定一个套圈位置,使得小明能获得的商品喜好值之和最大。你只用告诉小明这个最大值就可以了。

形式化地,n 个商品一列排开,小明对其喜好值分别为 a_1, a_2, ..., a_n。套圈的大小为 L,即可以任选套圈位置 i (1 ≤ i ≤ n-L+1),小明获得的商品为区间 [i, i+L-1],喜好值之和为:a_i + a_{i+1} + a_{i+2} + ... + a_{i+L-1}。

你需要决定一个位置 i,使得上述喜好值之和最大。你只用输出这个最大值。

输入描述

第一行 2 个整数分别为 n 和 L,表示商品数量和套圈的大小。

第二行 n 个整数 a_1, a_2, ..., a_n,表示各个商品的喜好值。

约束:1 ≤ L ≤ n ≤ 50000,0 ≤ a_i < 1000

输出描述

输出一个整数,表示能获得的最大喜好值之和。

样例输入

5 3
7 1 2 5 5

样例输出

12

样例解释

从第 3 个位置套圈,套中区间 [3, 5] 内的商品,其喜好值之和为 12,可以证明没有更优选择。

参考题解

解题思路:

核心是"滑动窗口"。求长度固定的连续子数组的最大和,可以先计算前 L 个元素的和作为初始窗口。接着窗口向右滑动,每次只需加上新进入窗口的元素并减去移出窗口的元素,就能以 O(1) 的时间更新当前和并维护最大值,整体时间复杂度为 O(n)。

C++:

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

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int numItems, ringSize;
    if (!(cin >> numItems >> ringSize)) {
        return 0;
    }

    vector<int> preferences(numItems);
    for (int i = 0; i < numItems; ++i) {
        cin >> preferences[i];
    }

    long long currentSum = 0;
    // 计算第一个窗口(大小为 ringSize)的喜好值之和
    for (int i = 0; i < ringSize; ++i) {
        currentSum += preferences[i];
    }

    long long maxSum = currentSum;
    // 滑动窗口:减去移出窗口的元素,加上新进入窗口的元素
    for (int i = ringSize; i < numItems; ++i) {
        currentSum += preferences[i] - preferences[i - ringSize];
        if (currentSum > maxSum) {
            maxSum = currentSum;
        }
    }

    cout << maxSum << "\n";
    return 0;
}

Java:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int numItems = sc.nextInt();
        int ringSize = sc.nextInt();

        int[] preferences = new int[numItems];
        for (int i = 0; i < numItems; i++) {
            preferences[i] = sc.nextInt();
        }

        long currentSum = 0;
        // 计算第一个窗口(大小为 ringSize)的喜好值之和
        for (int i = 0; i < ringSize; i++) {
            currentSum += preferences[i];
        }

        long maxSum = currentSum;
        // 滑动窗口:减去移出窗口的元素,加上新进入窗口的元素
        for (int i = ringSize; i < numItems; i++) {
            currentSum += preferences[i] - preferences[i - ringSize];
            if (currentSum > maxSum) {
                maxSum = currentSum;
            }
        }

        System.out.println(maxSum);
    }
}

Python:

import sys
input = sys.stdin.readline

def main():
    n, L = map(int, input().split())
    a = list(map(int, input().split()))

    # 计算第一个窗口(大小为 L)的喜好值之和
    current_sum = sum(a[:L])
    max_sum = current_sum

    # 滑动窗口:减去移出窗口的元素,加上新进入窗口的元素
    for i in range(L, n):
        current_sum += a[i] - a[i - L]
        if current_sum > max_sum:
            max_sum = current_sum

    print(max_sum)

main()

第二题:装备挑选

题目

在某款角色扮演游戏中,玩家的角色拥有三项核心属性:力量、敏捷和智力。

你的仓库中目前存储了 N 件装备,每一件装备都拥有这三项属性的数值。第 i 件装备的力量值为 x_i,敏捷值为 y_i,智力值为 z_i。需要注意的是,这些数值可能为负数。

为了应对即将到来的高难度副本,你需要从这 N 件装备中恰好挑选出 M 件进行装备。装备穿戴后,角色的最终属性值为所选 M 件装备对应属性值的代数和,即:

  • 最终力量 X = x_1 + x_2 + ... + x_M
  • 最终敏捷 Y = y_1 + y_2 + ... + y_M
  • 最终智力 Z = z_1 + z_2 + ... + z_M

为了追求极致的战斗风格,角色强度评分为三项最终属性值的绝对值之和,即 |X| + |Y| + |Z|。

请计算一下,如何从 N 件装备中挑选 M 件,才能使得角色的强度评分最大?

输入描述

第一行

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

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

面试时间:2h流程:笔试+面试,一面完光速拉二面面试官过来。1.索引有哪些类型?(聚蔟&nbsp;非聚蔟,八股吟唱)2.如何判断哪些字段要加索引?(答的主键要加,有唯一约束的可以加,高频查询的列要加,经常用来order&nbsp;by排序的要加)3.什么情况下索引会不生效?(八股吟唱)4.一张学生表,里面有学生姓名,学生年龄等字段,重点关心学生姓名stu_name,如何查出重名的学生?(我答group&nbsp;by,没答对。)5.有一张学生成绩表,里面有学生姓名,课程名字,课程成绩,比如:张三,语文,80;张三,数学,60;如何查出所有成绩都>=80分的行数据?(兜兜转转后,我答的先用子查询查出,成绩<80分的行数据,并group&nbsp;by分组去重,再用这个子查询的临时表和主表进行比较,找出姓名重名的行数据,截去掉这些数据,得到的就是所有成绩>=80的优秀学生数据。面试官说思路没问题,我猜可能中间有点差错,因为我忘记group&nbsp;by的机制了)6.创建线程的方式有几种(三种,并开始八股吟唱ing)7.笔试里,是对单例模式没有思考吗?(我说笔试写的根本不是单例模式,写的单模板模式,我不敢写就没写,并背诵单例模式思路)8.除了单例模式,你还了解哪些设计模式?(以spring源码为基础,举出里面用到的设计模式,aop的代理模式与策略模式巴拉巴拉)9.如何实现登录的互踢?设备a在登录账户后,设备b也登录账户,需要设备a的账户被踢掉。(这个是我项目经历里的,我用的是redis中存token,同时加上随机值作为唯一标识,新设备登录账户,将同样token前缀的key删除,再把新设备的token存进去,前端隔一段时间检查用户登录状态,这样旧设备被检测token过期,被踢掉。)10.如果我先登录完,然后新开一个页签,我需要再进行登录一次吗?就是说,我的状态还在吗?(在,原因我不清楚,我当时说的因为浏览器做了缓存)11.网关是如何拦截请求,做白名单校验的?(项目经历里的,黑马的那一套,自定义请求拦截器写好白名单,网关拦截请求并对白名单进行匹配,从而判断是放行还是继续拦截做校验)12.非静态方法里能定义静态变量吗?(八股吟唱)-------------------------一面结束,十几分钟后二面面试官带着hr来了。13.遇到不好打交道的人应该怎么做?14.职业规划是啥,考研还是就业。15.说说自己的优缺点。16.讲讲你实习经历里的业务(最让我吐槽的一点,也不说是哪方面业务,不问实习产出,就让我讲一整个项目的业务流程,大哥这是我写了两三个月的项目啊,我从哪跟你讲起)17.对业务流程的一些追问(连拷打都算不上,就是像个用户一样问流程,我能不能提交多次啊?我能不能以个人身份参赛啊?工作流核心逻辑是调的远程接口吗?一个技术名词都没问)18.讲讲笔试题里的算法(hot100的非重复子串的最大长度,abcabc输出3,aaaa输出1)19.写一个你熟悉的排序(只记得二分,所以写的二分)20.反问环节总结:薪资110一天,问的感觉比我面的那些5k的都难,一面全是场景题,二面也不问产出全问业务。而且实习期间不让回学校写毕设,不保证转正,还查户口问我家庭情况。。。位置也偏僻,我过来一趟要两个半小时。看得起这薪资的过不去面试,过得了面试的看不上这薪资,可以去面试检验下自己的八股水平。ps:笔试也很难,一道hot100算法,两道编程题算输出结果,两道还是三道手写sql,其余的是八股题,其中一道还打错字了,单例模式写成单模板模式,boss上hr说笔试面试的淘汰率很高,我只能说难度确实大,但有没有可能别人也在淘汰你呢😂
查看19道真题和解析
点赞 评论 收藏
分享
拼多多的笔试题我印象中是没有选择的,直接就是算法题。算法题涉及到了很多算法,但感觉高频的就是贪心和动态规划,主要面试官对数据范围别出心裁,这样设计下肯定会爆int,需要处理大数据的情况。现在还记得当时的一道动态规划题,题干看起来平平无奇,就是一道典型的序列匹配问题,可一看数据范围直接傻眼&nbsp;——&nbsp;测试用例的输入规模直接拉到了&nbsp;10的5次方级别,常规的&nbsp;O(n的平方)解法连样例都跑不通,必须要优化到&nbsp;O(nlogn)才能勉强通过。更坑的是,题目里的数值计算涉及大量累加,数据范围直接突破了&nbsp;32&nbsp;位整数的上限,稍不注意就会溢出,被迫全程用&nbsp;long&nbsp;甚至&nbsp;BigInteger&nbsp;来处理,无形中又增加了代码的复杂度和调试难度。另一道贪心题更是让人头大,题干描述得十分隐晦,没有直接给出贪心策略的提示,需要先把业务场景转化为数学模型,再推导最优子结构。最绝的是,普通的贪心思路只能过&nbsp;60%&nbsp;的用例,剩下的&nbsp;40%&nbsp;全是边界陷阱,比如需要结合优先级队列做二次优化,或者在贪心选择中加入回溯判断,稍不留神就会掉进坑里。整场笔试下来,没有一道题是&nbsp;“裸题”,每道题都在基础算法上叠加了数据规模和边界条件的考验。和其他公司不同,拼多多的笔试不考基础语法,不考八股知识,就是纯纯的算法硬实力较量,不仅要会算法思路,还要懂代码优化、数据溢出处理、时间复杂度把控,对选手的综合能力要求极高。最后交卷的时候,三道题只勉强&nbsp;AC&nbsp;了一道半,剩下的一道题卡在了最后一个测试用例,就是因为没考虑到大数据下的内存占用问题。现在回想起来,拼多多的笔试不是难在算法本身,而是难在对细节的极致把控和对选手抗压能力的考验,堪称是我做过的最&nbsp;“硬核”&nbsp;的一场笔试。
你做过最难的笔试是哪家公...
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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