算法 - hash表 - 2244. 完成所有任务需要的最少轮数 思路题解

2024-05-15 02:04

本文主要是介绍算法 - hash表 - 2244. 完成所有任务需要的最少轮数 思路题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2244. 完成所有任务需要的最少轮数

文章目录

  • [2244. 完成所有任务需要的最少轮数](https://leetcode.cn/problems/minimum-rounds-to-complete-all-tasks/description/)
    • 说明
    • 题解思路
      • hash表
    • Code
      • hash表

说明

给你一个下标从 0 开始的整数数组 tasks ,其中 tasks[i] 表示任务的难度级别。在每一轮中,你可以完成 2 个或者 3 个 相同难度级别 的任务。返回完成所有任务需要的 最少 轮数,如果无法完成所有任务,返回 -1 。示例 1:输入:tasks = [2,2,3,3,2,4,4,4,4,4]
输出:4
解释:要想完成所有任务,一个可能的计划是:
- 第一轮,完成难度级别为 2 的 3 个任务。 
- 第二轮,完成难度级别为 3 的 2 个任务。 
- 第三轮,完成难度级别为 4 的 3 个任务。 
- 第四轮,完成难度级别为 4 的 2 个任务。 
可以证明,无法在少于 4 轮的情况下完成所有任务,所以答案为 4 。
示例 2:输入:tasks = [2,3,3]
输出:-1
解释:难度级别为 2 的任务只有 1 个,但每一轮执行中,只能选择完成 2 个或者 3 个相同难度级别的任务。因此,无法完成所有任务,答案为 -1 。提示:1 <= tasks.length <= 105
1 <= tasks[i] <= 109

题解思路

hash表

  • 分析题意,有两条分支
    1. 任务无法完成
    2. 任务可以完成
  • 无法完成的情况只有一种,就是任务的数量无法用2m+3n的方式表示,在数量为正整数的情况下,仅为数量1的情况会存在
  • 任务可以完成的情况,需要找到最少的操作数,尽可能一次完成三个任务,会获得更少的操作数
    • 若任务的数量为x,每次都完成三个任务
    • 有最后整除、余2、余1三种可能
    • 整除的情况操作数为x/3,全部用三任务的方式完成
    • 余2的情况操作数为x/3 + 1,将余2的任务用二任务的方式完成
    • 余1的情况操作数也为x/3 + 1,因为余1的情况可以回退一步看作是余4,使用两次二任务方式操作,x/3-1 + 2 => x/3 + 1
  • 关于实现:
    • 可以用排序+双指针的形式,只遍历一次
    • 也可以用哈希表,key为任务的难度,value为任务数量(我比较喜欢用hash表。。)
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

Code

hash表

class Solution {public int minimumRounds(int[] tasks) {Map<Integer, Integer> taskMap = new HashMap<>();for(int task : tasks){taskMap.put(task, taskMap.getOrDefault(task, 0) + 1);}int res = 0;for(Integer task : taskMap.keySet()){if(taskMap.get(task) == 1) return -1;int rem = taskMap.get(task) % 3;res += rem == 0 ? taskMap.get(task) / 3 : taskMap.get(task) / 3 + 1;}return res;}
}

这篇关于算法 - hash表 - 2244. 完成所有任务需要的最少轮数 思路题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990490

相关文章

SpringBoot中使用定时任务schedule详解

《SpringBoot中使用定时任务schedule详解》文章介绍了如何在Spring应用中使用@EnableScheduling注解启用定时任务,并创建一个配置类来定义定时任务的执行,文章还详细解释... 目录1、在spring启动类上添加注解@EnableScheduling2、创建定时任务配置类3、执

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Spring定时任务之fixedRateString的实现示例

《Spring定时任务之fixedRateString的实现示例》本文主要介绍了Spring定时任务之fixedRateString的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录从毫秒到 Duration:为何要改变?核心:Java.time.Duration.parse

Oracle Scheduler任务故障诊断方法实战指南

《OracleScheduler任务故障诊断方法实战指南》Oracle数据库作为企业级应用中最常用的关系型数据库管理系统之一,偶尔会遇到各种故障和问题,:本文主要介绍OracleSchedul... 目录前言一、故障场景:当定时任务突然“消失”二、基础环境诊断:搭建“全局视角”1. 数据库实例与PDB状态2

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.