leetcode 2244. Minimum Rounds to Complete All Tasks(完成所有task至少要多少轮)

news2024/9/25 9:29:19

在这里插入图片描述
tasks数组里面的数字表示难度的等级,每一轮只能完成2 或者 3个同等级的task,
问至少需要多少轮能完成所有的task, 不能完成的返回-1.

思路:

先来看下什么情况下不能完成
由于一轮只能完成2 或 3个,那如果该等级的task只有一个呢?那就是无法完成了。

另外还需考虑一点,如果已知某个等级task的个数,如何判断最少能完成它的轮数。
一轮只能完成2或3个。

需要知道的是,除了1,剩下所有的整数都能用2,3拼出来
或者反过来想,除了1以外,2,3自己也不用说,从4开始往后的整数,除以3以后要么余1,要么余2对吧,
余1的情况,从前面除的数字中借一个3,例如4,除3余1,1借前面一个3以后是4,4是2的倍数。
余2的情况,2能被2整除。
所以4以后的整数一定能被2和3拼出来。

同样的,一个整数m, 如果它能被3整除,需要的轮数是m/3,这能理解,
如果有余1或余2的情况,
余2: 2/2 = 1,所以需要的轮数是m / 3 + 1,
余1:前面借一个3,(3+1)/2 = 2, 所以轮数是 m/3 - 1 + 2 = m/3 + 1,
所以这两种情况是一样的,

那么就推出来,整数m, m==1时,不能完成,
m % 3 == 0时,需要m/3轮,m % 3 != 0时,需要m / 3 + 1轮

这个整数m 就是每个数字出现的次数。
每个数字的次数可以用HashMap来统计。

    public int minimumRounds(int[] tasks) {
        HashMap<Integer, Integer> map = new HashMap<>();
        int res = 0;

        for(int task : tasks) {
            map.put(task, map.getOrDefault(task, 0) + 1);
        }

        for (Map.Entry<Integer,Integer> entry: map.entrySet()) {
            int cur = entry.getValue();
            if(cur == 1) return -1;
            if(cur % 3 == 0) res += cur / 3;
            else res += cur / 3 + 1;
        }
       
        return res;
    }

还有一种方法是先把数组排序,那么相同的数字就会放在一起,这样利用数组下标就可以统计每个数字的次数。
这种方法会快一些。

    public int minimumRounds(int[] tasks) {
        Arrays.sort(tasks);
        int n = tasks.length;
        int res = 0;

        for(int i = 0; i < n; i ++) {
            int j = i + 1;
            while(j < n && tasks[j] == tasks[i]) j ++;
            
            int cnt = j - i;
            if(cnt == 1) return -1;
            if(cnt % 3 == 0) res += cnt / 3;
            else res += cnt / 3 + 1;
            i = j - 1;  //因为有i++,所以要退一个,如果去掉i++,则这里是i=j
        }
        return res;
    }

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

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

相关文章

P1-- 信号--通讯原理

前言&#xff1a; 最近看了《无线系统设计与国际标准》后面的几个核心技术 OFDM,Modulation&#xff0c;格雷码&#xff0c;MIMO 等技术&#xff0c;其底层的数学思想主要包括傅里叶变换 &#xff0c;狄拉克函数&#xff0c;卷积&#xff0c;线性代数基础运算。 这边结合 北京…

Electron开发-从推门到进门

一、Electron 的介绍 Electron是利用web前端技术进行桌面应用开发的一套框架。是由 github 开发的开源框架&#xff0c;允许开发者使用 Web 技术构建跨平台的桌面应用&#xff0c;它的基本结构&#xff1a; Electron Chromium Node.js Native API Chromium&#xff1a;为 …

大数据挖掘-伤寒论和金匮要略(COVID-19用药启示录)

来自Toby老师&#xff0c;大数据挖掘-伤寒论和金匮要略 大家好&#xff0c;我是Toby老师&#xff0c;三年来新冠病毒肆虐全球&#xff0c;带来一些列症状&#xff0c;例如发热&#xff0c;恶寒&#xff0c;咳嗽&#xff0c;咽喉痛&#xff0c;腹泻&#xff0c;心脑血管疾病等等…

最低成本尝试做游戏的方式

本文首发于微信公众号&#xff1a;小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。如果说有 100 个人想过去做游戏的话&#xff0c;那么最终大概只有不到 20 个人真的去尝试了&…

【TypeScript】TS类型断言-类型的声明和转换(五)

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

echartjs 实现 cross (十星辅助线)跟随吸附高亮点

前言 项目是金融项目&#xff0c;就像支付宝基金的走势图一样。但图表库使用的是 echart 而不是 antv 的 f2&#xff0c;要问为什么不直接用 f2 &#xff1f;问就是因为项目历史包袱。 背景 了解过 echart 的都知道&#xff0c;官方提供了十星辅助线&#xff0c;只要设置 ax…

服务端渲染和客户端渲染

介绍 服务端渲染 servlet开发 浏览器请求servlet&#xff0c;servlet在服务端生成html 响应给浏览器&#xff0c;浏览器展示html的内容&#xff0c;这个过程就是服务端渲染。 输入url——>请求到tomcat——Servlet / jsp来解析解析用户请求并处理——>服务端渲染生成ht…

收藏网页版小游戏:蜘蛛纸牌、扫雷、水果忍者、打地鼠、吃豆人

学习之余当然是摸鱼了&#xff0c;这里分享几个不用下载直接在线玩耍的游戏。有蜘蛛纸牌网页版在线玩、在线扫雷小游戏、在线玩的水果忍者、吃豆人、打地鼠、3D模仿。 下面我将一个个列出来。欢迎体验收藏&#xff01; 蜘蛛纸牌&#xff1a;这是一款刺激好玩的棋牌小游戏。大家…

【C语言航路】第九站:数据的存储

目录 一、数据类型介绍 1.基本的内置数据类型 2.类型的基本归类 二、整型在内存中的存储 1.原码反码补码 2.大端字节序与小端字节序 3.一些经典的题目 三、浮点型在内存中的存储 总结 一、数据类型介绍 1.基本的内置数据类型 这部分我们在一开始的时候已经说过了&…

中职组网络安全2022年安徽省赛信息隐藏与探索

首先这一套题目我们先看一下环境: 以上来给到了一个主页的网站,做这样的题目我们第一个想到的就是源代码,于是我们查找源代码看看里边有什么东西: 在contact.php中发现了flag1,但是这一看就是一个base64代码,我们将其进行解密:

华脉智联可视化指挥调度系统

华脉智联可视化指挥调度系统&#xff0c;多端一体化综合智能指挥调度平台&#xff0c;可以实现对各级人员、设备、系统统一指挥&#xff0c;应急调度&#xff0c;为行业应用提供可视化智能指挥调度系统解决方案。 1、可视化指挥调度系统介绍 可视化指挥调度系统基于现有的4G通信…

处理WM_KILLFOCUS消息时需要注意的地方

之前我在一篇文章中曾经提过&#xff0c;不应该利用 WM_KILLFOCUS 消息中对表单的字段进行有效性校验。 今天的文章&#xff0c;我将介绍另外一个反面例子&#xff0c;来表现当使用 WM_KILLFOCUS 消息处理焦点相关的问题时所带来的混乱。 假设&#xff0c;有一个编辑框控件使用…

编写 MBR 主引导记录

文章目录前言mbs.S代码实验操作前言 本博客记录《操作系统真象还原》第二章最后一节的实验操作~ 实验需要安装Bochs软件&#xff0c;具体可食用Bochs下载安装博客。 实验环境&#xff1a;ubuntu18.04VMware 实验内容&#xff1a;在屏幕上打印字符串“1 MBR”&#xff0c;背…

C进阶_C语言_指针进阶_C语言指针进阶

除了自己的无知&#xff0c;我什么都不懂。 ——苏格拉底 *此博客为进阶指针详解&#xff0c;需要有一定的初阶指针基础。 我们知道&#xff0c;指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识一块内存空间。 指针的大小是固定的4/8个字节。在32位平台上是…

003-Ensp-实验-配置DHCP

实验要求 1. 根据网络结构开DHCP服务&#xff0c;使PC1 / PC2 自动获取IP地址并可以互Ping 网络结构 实验步骤 1. 配置AR2路由器g0/0/0接口IP&#xff0c;开启DHCP <Huawei>system-view [Huawei]dhcp enable [Huawei]interface g0/0/0 [Huawei-GigabitEthernet0/0/0]…

公司变更名称很麻烦吗?来来来,心周小编教你小技巧

我们都知道&#xff0c;公司如果拥有一个好的名字&#xff0c;对公司的推广会带来很大的便利&#xff0c;让客户更容易记住公司&#xff0c;记住公司的产品及相关性能&#xff0c;比如奥迪汽车公司&#xff0c;大家能一下子想到奥迪车&#xff0c;想到奥迪车的设计&#xff0c;…

UG/NX二开Siemens官方实例解析 4.3 EX_Curve_CreateSpline(创建样条曲线)

前言本系列文章主要讲解NXOpen UF API&#xff08;简称ufun函数&#xff09;的使用&#xff0c;之前看教学视频大都建议用ufun进行开发&#xff0c;这里西门子官方还专门给了一套系列文章来讲&#xff0c;说明官方也是特别推崇ufun。本人从事二开也有一段时间了&#xff0c;我的…

EasyCRM V5客户关系管理系统源码,全功能全插件带手机版无加密开源版,集成OA系统

这个是Easycrm v5最新版本&#xff0c;程序代码全部大量重写&#xff0c;运行效率提升100倍。轻松负载500w以上数据量。 代码全部明文开源&#xff0c;便于二次开发和部署。 网上其他地方的版本都是很遗憾的告诉你&#xff0c;没有手机版&#xff0c;没有财务管理等功能插件。…

【Unity3D编辑器扩展】Unity3D中实现UI界面控制,UI界面的显示和隐藏实现

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群&#xff1a;1040082875 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;可能遇到管理…

EMP v2.5三级共享深度定制对ESM 的支持

版本背景 1 Module Federation 共享逻辑CDN复用性不高2 ESM兼容性日益成熟&#xff0c;性能表现越来越好3 市面上针对 ESM 的模块共享实现不完善4 开发、正式环境结合共享的开发体验不佳 ESM 概念 ESM - ES modules 是 JavaScript 官方的标准化模块系统。相比于 CommonJS 和 …