【秋招笔试】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个时间周期

题解

这道题目考察的是贪心算法和数学分析能力。关键在于找出执行任务的最优策略。

首先分析问题的本质:我们需要在满足冷却约束的前提下,尽可能紧凑地安排任务执行。

核心思路是以出现次数最多的任务类型为基准来构建时间轴。假设某个任务类型出现了 次,那么我们可以把这些任务看作"桶"的标志,每两个相邻的同类任务之间必须间隔至少 个时间单位。

具体步骤:

  1. 统计每种任务类型的出现次数
  2. 找出最大出现次数 和达到这个次数的任务类型数量
  3. 构建时间轴:
  4. 考虑任务总数的限制:答案不能少于任务总数

最终答案为:

时间复杂度:,其中 是任务总数。

参考代码

  • 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%内容,订阅专栏后可继续查看/也可单篇购买

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

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

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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