哈希算法题目:任务调度器
字数 763 2025-10-28 20:05:21
哈希算法题目:任务调度器
题目描述:给定一个字符数组 tasks 表示 CPU 需要执行的任务,用字母 A 到 Z 表示,以及一个整数 n 表示冷却时间。每个任务执行一个时间单位,在任意两个相同任务之间必须有至少 n 个时间单位的冷却时间,或者处于待命状态。返回完成所有任务所需的最少时间单位。
解题过程:
步骤1:理解问题核心
- 相同任务之间必须有 n 的冷却间隔
- 需要找到最优调度顺序使总时间最小化
- 关键思路是优先安排出现次数最多的任务
步骤2:分析任务分布
- 统计每个任务的频率,找出最大频率 maxFreq
- 计算具有最大频率的任务数量 count
- 示例:tasks = ["A","A","A","B","B","B"], n = 2
- 频率统计:A:3, B:3 → maxFreq = 3, count = 2
步骤3:计算最小时间框架
- 基础框架 = (maxFreq - 1) × (n + 1) + count
- (maxFreq-1) 表示完整周期数
- (n+1) 表示每个周期长度(执行任务 + 冷却时间)
- 最后加上所有最高频率任务
步骤4:处理特殊情况
- 当任务种类很多时,实际所需时间可能超过框架计算值
- 最终结果 = max(框架计算值, 任务总数)
- 因为每个任务都需要被处理,不能少于 tasks.length
步骤5:验证公式
以前面示例计算:
- 框架值 = (3-1)×(2+1) + 2 = 2×3 + 2 = 8
- 任务总数 = 6
- 取最大值 max(8,6) = 8
实际最优调度:A→B→待命→A→B→待命→A→B
步骤6:算法实现
- 统计任务频率数组
- 找出最大频率和具有该频率的任务数
- 计算两种可能值并返回较大者
这个解法通过哈希统计和数学分析,避免了复杂的调度模拟,在 O(n) 时间内解决问题。