哈希算法题目:任务调度器
字数 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:算法实现

  1. 统计任务频率数组
  2. 找出最大频率和具有该频率的任务数
  3. 计算两种可能值并返回较大者

这个解法通过哈希统计和数学分析,避免了复杂的调度模拟,在 O(n) 时间内解决问题。

哈希算法题目:任务调度器 题目描述:给定一个字符数组 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) 时间内解决问题。