【笔试刷题】2026.03.21-第二套-小米-改编真题
✅ 春招备战指南 ✅
💡 学习建议:
- 先尝试独立解题
- 对照解析查漏补缺
🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。
🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力
🌸 目前本专栏已经上线200+套真题改编解析,后续会持续更新的
春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗
2026.03.21-第二套-小米
这套两题都很典型。第一题是固定长度区间最大和,看到“连续一段、长度恰好为 ”之后,直接上定长滑动窗口就够了;第二题则需要把三维绝对值和拆成
种符号组合,再在每种组合下贪心取前
大贡献。
开场题主要考察基础建模和实现稳定性,尤其是窗口右移时“加新减旧”的写法要一次写对。第二题虽然包装成装备属性,但本质模型非常纯粹,关键是尽快想到绝对值展开,再把问题压回排序求和。
01. 年会套圈
年会套圈
问题描述
K 小姐正在参加年会互动区的套圈游戏。桌上有 件奖品排成一列,第
件奖品对应的喜好值为
。
她手里的套圈宽度固定为 ,并且落点非常准。也就是说,只要她把套圈放在某个起点
,就会恰好套中连续的这一段奖品:
这次获得的总喜好值就是:
请你帮她计算,最多能拿到多少喜好值。
输入格式
第一行输入两个整数 ,表示奖品数量和套圈宽度。
第二行输入 个整数
,表示每件奖品的喜好值。
输出格式
输出一行一个整数,表示能够获得的最大喜好值之和。
样例输入
5 3
7 1 2 5 5
样例输出
12
样例说明
把套圈放在第 个位置时,会套中区间
,对应喜好值之和为:
这是所有合法位置中的最大值。
数据范围
题解
区间长度已经固定成了 ,所以题目其实就是:
- 在所有长度恰好为
的连续子数组里
- 找出元素和的最大值
定长滑动窗口
先计算前 个元素的和,作为第一个窗口:
设它的和为 cur,同时把答案 ans 初始化为 cur。
接下来窗口每次向右移动一格:
- 新进入窗口的是
- 离开窗口的是
所以新窗口的和可以用上一窗口直接更新:
每次更新完后,用 ans 维护最大值即可。
为什么这样是对的
所有合法选择对应的都是长度为 的连续区间,滑动窗口正好把这些区间按顺序扫了一遍,没有遗漏也不会重复。
而相邻两个窗口只差两个元素:
- 一个新进来
- 一个被移出去
因此不用每次重新把整段求和,只要做一次“加新减旧”就能得到当前窗口的真实和。
复杂度分析
- 时间复杂度:
- 空间复杂度:
参考代码
- Python
import sys
input = lambda: sys.stdin.readline().strip()
def solve() -> None:
n, length = map(int, input().split())
arr = list(map(int, input().split()))
cur = sum(arr[:length])
ans = cur
for i in range(length, n):
cur += arr[i] - arr[i - length]
if cur > ans:
ans = cur
print(ans)
if __name__ == "__main__":
solve()
- Cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, length;
cin >> n >> length;
vector<long long> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
long long cur = 0;
for (int i = 0; i < length; ++i) {
cur += a[i];
}
long long ans = cur;
for (int i = length; i < n; ++i) {
cur += a[i] - a[i - length];
ans = max(ans, cur);
}
cout << ans << '\n';
return 0;
}
- Java
import java.io.*;
import java.util.*;
public class Main {
static class FastScanner {
private final InputStream in = System.in;
private final byte[] buffer = new byte[1 << 16];
private int ptr = 0;
private int len = 0;
private int read() throws IOException {
if (ptr >= len) {
len = in.read(buffer);
ptr = 0;
if (len <= 0) {
return -1;
}
}
return buffer[ptr++];
}
long nextLong() throws IOException {
int c;
do {
c = read();
} while (c <= 32 && c != -1);
long sign = 1;
if (c == '-') {
sign = -1;
c = read();
}
long val = 0;
while (c > 32) {
val = val * 10 + (c - '0');
c = read();
}
return val * sign;
}
}
public static void main(String[] args) throws Exception {
FastScanner fs = new FastScanner();
int n = (int) fs.nextLong();
int length = (int) fs.nextLong();
long[] a = new long[n];
for (int i = 0; i < n; i++) {
a[i] = fs.nextLong();
}
long cur = 0;
for (int i = 0; i < length; i++) {
cur += a[i];
}
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力
查看14道真题和解析