【秋招笔试】2025.08.17大疆秋招机考第一套真题改编
✅ 秋招备战指南 ✅
💡 学习建议:
- 先尝试独立解题
- 对照解析查漏补缺
🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。
🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力
🌸 目前本专栏已经上线130+套真题改编解析,后续会持续更新的
春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗
题目一:云计算中心处理器任务分配
1️⃣:统计各任务类型出现次数,找出最频繁任务类型
2️⃣:利用数学公式构建最优时间轴安排
3️⃣:考虑任务总数限制,取两者最大值
难度:中等
这道题目的关键在于理解任务调度的本质,通过以最频繁任务为基准构建时间轴,结合贪心思想得到最优解。需要掌握数学建模能力,将复杂的调度问题转化为简洁的数学公式求解。
题目二:企业组织架构管理链路分析
1️⃣:根据层序遍历序列重建二叉树结构
2️⃣:使用深度优先搜索计算各节点子树深度
3️⃣:动态维护全局最大直径值
难度:中等
这道题目结合了二叉树的构建与树形动态规划,需要理解二叉树直径的计算方法。通过一次DFS遍历即可求解,体现了算法设计的优雅性。关键在于将"直径"问题转化为"左右子树深度和"的问题。
01. 云计算中心处理器任务分配
问题描述
小兰负责管理一个云计算中心的任务调度系统。系统中有一台处理器需要执行多个不同类型的任务,这些任务用字符串 表示,其中每个字符代表一种任务类型(用字母
到
表示)。
由于硬件限制,处理器在执行完某种类型的任务后,需要冷却一段时间才能再次执行相同类型的任务。具体来说,两个相同类型的任务之间必须间隔至少 个时间周期。在冷却期间,处理器可以执行其他类型的任务,或者保持空闲状态。
小兰希望能够合理安排任务执行顺序,使得完成所有任务所需的总时间周期数最少。
输入格式
第一行包含一个正整数 ,表示冷却周期的长度。
第二行包含一个正整数 ,表示任务字符串的长度。
第三行包含一个长度为 的字符串
,仅包含大写字母,表示需要执行的任务序列。
输出格式
输出一行,包含一个整数,表示完成所有任务所需的最短时间周期数。
样例输入
2
6
AAABBB
样例输出
8
数据范围
- 任务字符串长度
- 任务字符串仅包含大写字母
样例 | 解释说明 |
---|---|
样例1 | 任务序列 AAABBB,冷却期为2。一种最优执行顺序为:A→B→idle→A→B→idle→A→B,总共需要8个时间周期 |
题解
这道题目考察的是贪心算法和数学分析能力。关键在于找出执行任务的最优策略。
首先分析问题的本质:我们需要在满足冷却约束的前提下,尽可能紧凑地安排任务执行。
核心思路是以出现次数最多的任务类型为基准来构建时间轴。假设某个任务类型出现了 次,那么我们可以把这些任务看作"桶"的标志,每两个相邻的同类任务之间必须间隔至少
个时间单位。
具体步骤:
- 统计每种任务类型的出现次数
- 找出最大出现次数
和达到这个次数的任务类型数量
- 构建时间轴:
- 考虑任务总数的限制:答案不能少于任务总数
最终答案为:
时间复杂度:,其中
是任务总数。
参考代码
- Python
import sys
input = lambda: sys.stdin.readline().strip()
def solve():
# 读取输入
n = int(input()) # 冷却周期
m = int(input()) # 任务字符串长度
tasks = input() # 任务字符串
# 统计每种任务的出现次数
freq = [0] * 26
for ch in tasks:
freq[ord(ch) - ord('A')] += 1
# 找到最大出现次数
f_max = max(freq)
# 统计达到最大次数的任务类型数量
cnt_max = freq.count(f_max)
# 计算最少需要的时间周期
# 要么是任务总数,要么是按最频繁任务安排的时间
ans = max(m, (f_max - 1) * (n + 1) + cnt_max)
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, m; // 冷却周期和任务数量
cin >> n >> m;
string tasks;
cin >> tasks;
// 统计每种任务出现次数
vector<int> cnt(26, 0);
for (char c : tasks) {
cnt[c - 'A']++;
}
// 找出最大出现次数
int f_max = *max_element(cnt.begin(), cnt.end());
// 统计达到最大次数的任务类型数量
int cnt_max = 0;
for (int freq : cnt) {
if (freq == f_max) cnt_max++;
}
// 计算结果
long long ans = max((long long)m,
(long long)(f_max - 1) * (n + 1) + cnt_max);
cout << ans << "\n";
return 0;
}
- Java
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()); // 冷却周期
int m = Integer.parseInt(br.readLine()); // 任务数量
String tasks = br.readLine(); // 任务字符串
// 统计每种任务
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力