【华为OD-E卷 - 112 任务最优调度 100分(python、java、c++、js、c)】

【华为OD-E卷 - 任务最优调度 100分(python、java、c++、js、c)】

题目

给定一个正整数数组表示待系统执行的任务列表,数组的每一个元素代表一个任务,元素的值表示该任务的类型。
请计算执行完所有任务所需的最短时间。
任务执行规则如下:
任务可以按任意顺序执行,且每个任务执行耗时间均为1个时间单位 两个同类型的任务之间必须有长度为N个单位的冷却时间,比如N为2时,在时间K执行了类型3的任务,那么K+1和K+2两个时间不能执行类型3任务 系统在任何一个单位时间内都可以执行一个任务,或者等待状态。 说明:数组最大长度为1000,数组最大值1000

输入描述

  • 第一行记录一个用半角逗号分隔的数组,数组长度不超过1000,数组元素的值不超过1000, 第二行记录任务冷却时间,N为正整数,N<=100

输出描述

  • 输出为执行完所有任务所需的最短时间

用例

用例一:
输入:
2,2,2,3
2
输出:
7

python解法

  • 解题思路:
  • 任务计数:

使用 Counter 来统计每个任务出现的频率,这样我们能快速了解哪些任务最多,并计算出这些任务的数量。
找到最频繁的任务:

最频繁的任务会影响到整体执行时间,因为它们需要“隔开”执行,每个相同的任务之间需要加上冷却时间。因此,我们需要计算出任务出现的最大频次以及最大频次的任务数量。
任务调度的最小时间计算:

假设最频繁的任务需要间隔 cool_down 时间来执行。如果最频繁的任务的出现次数为 max_freq,那么这类任务之间的间隔时间为 (max_freq - 1) * (cool_down + 1),其中 (max_freq - 1) 是其他任务间隔的数量,cool_down + 1 是任务间隔时间(冷却时间加上任务本身的执行时间)。
由于可能有多个任务频率与 max_freq 相同,因此我们需要考虑最频繁的任务的数量 count_max_freq,它们会填充这些间隔位置。
最终结果:

最终的时间应该是 max((max_freq - 1) * (cool_down + 1) + count_max_freq, len(tasks))。即,如果冷却时间安排后的时间小于任务数量,那么就返回任务数量,因为每个任务至少需要执行一次

from collections import Counterdef min_exec_time(tasks, cool_down):# 统计每个任务的出现频率freq_map = Counter(tasks)# 获取任务中出现频率最高的任务次数max_freq = max(freq_map.values())# 计算出现最大频率的任务数量(可能有多个任务频率相同)count_max_freq = sum(1 for freq in freq_map.values() if freq == max_freq)# 计算调度这些任务所需的最短时间:# (max_freq - 1) * (cool_down + 1) 是间隔时间# count_max_freq 是填充这些间隔的额外任务数return max((max_freq - 1) * (cool_down + 1) + count_max_freq, len(tasks))# 输入获取
input_tasks = input().split(",")  # 输入任务列表,用逗号分隔
tasks = list(map(int, input_tasks))  # 将输入转换为整数列表
cool_down = int(input())  # 输入冷却时间# 调用函数并输出结果
print(min_exec_time(tasks, cool_down))

java解法

  • 解题思路
  • 任务频率统计:

使用一个 HashMap 来统计每个任务出现的频次。这样可以方便地找出任务中出现次数最多的任务,以及有多少个任务的频次相同。
计算最大频次和频次对应任务的数量:

找到出现频次最高的任务数,并计算有多少种任务的出现频率等于最大频率。
计算最小执行时间:

根据最大频次和冷却时间计算最小时间:
任务调度中,最频繁的任务会限制整体的执行时间。我们需要给它们之间加上冷却时间。
如果最频繁任务的出现次数是 maxFreq,那么这些任务之间至少需要 (maxFreq - 1) * (coolDown + 1) 的时间。
由于可能有多个任务频率与 maxFreq 相同,我们需要考虑这些任务如何填充任务空隙。
最终结果是:max((maxFreq - 1) * (coolDown + 1) + countMaxFreq, tasks.length)。这样可以保证即使冷却时间调整后,至少能保证每个任务的执行

import java.util.HashMap;
import java.util.Scanner;public class Main {public static void main(String[] args) {// 创建Scanner对象读取输入Scanner sc = new Scanner(System.in);// 读取任务列表并拆分成字符串数组String[] inputTasks = sc.next().split(",");int[] tasks = new int[inputTasks.length];// 将任务列表字符串数组转为整数数组for (int i = 0; i < inputTasks.length; i++) {tasks[i] = Integer.parseInt(inputTasks[i]);}// 读取冷却时间int coolDown = sc.nextInt();// 调用 minExecTime 函数计算最小执行时间并输出System.out.println(minExecTime(tasks, coolDown));}// 计算最小执行时间public static int minExecTime(int[] tasks, int coolDown) {// 创建一个 HashMap 用于统计每个任务的出现频次HashMap<Integer, Integer> freqMap = new HashMap<>();// 遍历任务数组并统计每个任务的频率for (int task : tasks) {freqMap.put(task, freqMap.getOrDefault(task, 0) + 1);}// 获取任务中出现次数最多的频率int maxFreq = freqMap.values().stream().max(Integer::compareTo).orElse(0);// 统计最大频率的任务个数int countMaxFreq = 0;for (int freq : freqMap.values()) {if (freq == maxFreq) countMaxFreq++;}// 计算最短执行时间:// (maxFreq - 1) * (coolDown + 1) 是最频繁任务的最短间隔时间// countMaxFreq 是填充这些间隔的额外任务数// 返回值是 (间隔时间 + 任务数量) 的最大值,确保任务数量足够return Math.max((maxFreq - 1) * (coolDown + 1) + countMaxFreq, tasks.length);}
}

C++解法

  • 解题思路
更新中

C解法

  • 解题思路

更新中

JS解法

  • 解题思路

更新中

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW自定义测量参数怎么设置?

以下通过一个温度采集案例&#xff0c;说明在 LabVIEW 中设置自定义测量参数的具体方法&#xff1a; 案例背景 ​ 假设使用 NI USB-6009 数据采集卡 和 热电偶传感器 监测温度&#xff0c;需自定义以下参数&#xff1a; 采样率&#xff1a;1 kHz 输入量程&#xff1a;0~10 V&a…

老游戏回顾:G2

一个老的RPG游戏。 剧情有独到之处。 ------- 遥远的过去&#xff0c;古拉纳斯将希望之光给予人们&#xff0c;人类令希望之光不断扩大&#xff0c;将繁荣握在手中。 但是&#xff0c;暗之恶魔巴鲁玛将光从人类身上夺走。古拉纳斯为了守护人类与其展开了一场激战&#xff0c…

DeepSeek R1 Distill Llama 70B(免费版)API使用详解

DeepSeek R1 Distill Llama 70B&#xff08;免费版&#xff09;API使用详解 在人工智能领域&#xff0c;随着技术的不断进步&#xff0c;各种新的模型和应用如雨后春笋般涌现。今天&#xff0c;我们要为大家介绍的是OpenRouter平台上提供的DeepSeek R1 Distill Llama 70B&…

【LeetCode: 887. 鸡蛋掉落 + 递归 + 二分 + dp】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

学习 PostgreSQL 流复制

PostgreSQL 流复制 PostgreSQL数据库异常中止后&#xff0c;数据库刚重启时&#xff0c;会重放停机前最后一个checkpoint点之后的 WAL日志&#xff0c;在把数据库恢复到停机的状态后&#xff0c;自动进入正常的状态&#xff0c;可以接收其他用户的查询和修改。 想象另一个场景…

LabVIEW位移测量系统

本文介绍了一种基于LabVIEW的位移测量系统&#xff0c;结合先进的硬件设备与LabVIEW平台的强大功能&#xff0c;能够实现对位移的精确测量和高效数据处理。该系统具备高精度、实时性和良好的可扩展性&#xff0c;适用于工程与科学实验中对位移测量的多种需求。 项目背景 位移…

Qt+海康虚拟相机的调试

做机器视觉项目的时候&#xff0c;在没有相机或需要把现场采集的图片在本地跑一下做测试时&#xff0c;可以使用海康的虚拟相机调试。以下是设置步骤&#xff1a; 1.安装好海康MVS软件&#xff0c;在菜单栏->工具选择虚拟相机工具&#xff0c;如下图&#xff1a; 2.打开虚拟…

数据结构【链式队列】

基于链式存储结构的队列实现与分析 一、引言 队列作为一种重要的数据结构&#xff0c;在计算机科学的众多领域有着广泛应用&#xff0c;如操作系统中的任务调度、网络通信中的数据缓冲等。本文通过C 代码实现了一个基于链式存储结构的队列&#xff0c;并对其进行详细解析。 …

路由器如何进行数据包转发?

路由器进行数据包转发的过程是网络通信的核心之一&#xff0c;主要涉及以下几个步骤&#xff1a; 接收数据包&#xff1a;当一个数据包到达路由器的一个接口时&#xff0c;它首先被暂时存储在该接口的缓冲区中。 解析目标地址&#xff1a;路由器会检查数据包中的目标IP地址。…

大数据sql查询速度慢有哪些原因

1.索引问题 可能缺少索引&#xff0c;也有可能是索引不生效 2.连接数配置&#xff1a;连接数过少/连接池比较小 连接数过 3.sql本身有问题&#xff0c;响应比较慢&#xff0c;比如多表 4.数据量比较大 -这种最好采用分表设计 或分批查询 5.缓存池大小 可能是缓存问题&#xff…

Excel 融合 deepseek

效果展示 代码实现 Function QhBaiDuYunAIReq(question, _Optional Authorization "Bearer ", _Optional Qhurl "https://qianfan.baidubce.com/v2/chat/completions")Dim XMLHTTP As ObjectDim url As Stringurl Qhurl 这里替换为你实际的URLDim postD…

『VUE』vue-quill-editor富文本编辑器添加按钮houver提示(详细图文注释)

目录 预览效果新建一个config.js存放标题编写添加提示的方法调用添加标题方法的生命周期总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 预览效果 新建一个config.js存放标题 export const titleConfig [{ Choice: .ql-bold…

STM32的HAL库开发-通用定时器输入捕获实验

一、通用定时器输入捕获部分框图介绍 1、捕获/比较通道的输入部分(通道1) 首先设置 TIM_CCMR1的CC1S[1:0]位&#xff0c;设置成01&#xff0c;那么IC1来自于TI1&#xff0c;也就是说连接到TI1FP1上边。设置成10&#xff0c;那个IC1来自于TI2&#xff0c;连接到TI2FP1上。设置成…

SpringBoot中的多环境配置管理

SpringBoot中的多环境配置管理 文章目录 SpringBoot中的多环境配置管理SpringBoot中的多环境配置管理 多环境配置的概述1. 为什么需要多环境配置&#xff1f;2. Spring Boot 中如何实现多环境配置&#xff1f;3. 多环境配置的应用场景4. 如何实现配置隔离&#xff1f; Spring B…

全网多平台媒体内容解析工具使用指南

一、工具特性概述 近期体验了一款基于Web端的多媒体解析服务&#xff0c;该平台通过技术创新实现跨平台内容解析功能&#xff0c;主要特点如下&#xff1a; 1.1 跨平台支持 兼容主流社交媒体&#xff1a;Bilibili、YouTube、Twitter、Instagram等 支持短视频平台&#xff1a…

C# winforms 使用菜单和右键菜单

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

网工_以太网MAC层

2025.02.05&#xff1a;网工老姜学习笔记 第12节 以太网MAC层 2.1 MAC层的硬件地址2.2 MAC地址特殊位含义2.3 终端适配器&#xff08;网卡&#xff09;具有过滤功能2.4 MAC帧的格式2.4.1 DIX Ethernet V2标准&#xff08;先私有&#xff0c;后开放&#xff0c;用得比较多&#…

鼠标滚轮冒泡事件@wheel.stop

我有一个页面,是在画布上的组件,但是组件中有一个table,table中数据多了,就会出现滚动条,正常情况下,滚动条用鼠标滚轮就可以滑动,但是这个table是在画布上,滚动滚轮会让画布缩放 在table外层的div上加上 wheel.stop,就生效了 wheel.stop 用途&#xff1a;这个修饰符用于处理鼠…

探索从传统检索增强生成(RAG)到缓存增强生成(CAG)的转变

在人工智能快速发展的当下&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已成为众多应用的核心技术。检索增强生成&#xff08;RAG&#xff09;&#xff08;RAG 系统从 POC 到生产应用&#xff1a;全面解析与实践指南&#xff09;和缓存增强生成&#xff08;CAG&#x…

graphRAG的原理及代码实战(1)基本原理介绍(上)

1、基本介绍 GraphRAG通过利用大模型从原始文本数据中提取知识图谱来满足跨上下文检索的需求。该知识图将信息表示为互连实体和关系的网络&#xff0c;与简单的文本片段相比&#xff0c;提供了更丰富的数据表示。这种结构化表示使 GraphRAG 能够擅长回答需要推理和连接不同信息…