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

简介: 【5月更文挑战第7天】

给你一个下标从 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 <= 10^5$
$1 <= tasks[i] <= 10^9$


首先分析一下,只能每轮完成2个或者3个,那么要求轮次最小,那么肯定贪心的想我们肯定优先完成3个任务,那么就有三种情况

  • 最后剩0个:就是直接每轮完成3个,这个是最优的。不用再考虑每轮完成两个的情况。
  • 最后剩一个:剩一个的话我们就需要再向同类之前3个分一个,也就是从3,1变成2,2这样就能够完整的完成任务。但是如果这类任务只有一个,则无法完成
  • 最后剩两个,剩两个我们直接完成这两个任务即可。
func minimumRounds(tasks []int) int {
   
    l:=len(tasks)
    mp:=map[int]int{
   }
    for i:=0;i<l;i++{
   
        mp[tasks[i]]++
    }
    ans:=0
    for _,value:=range mp{
   
        //fmt.Println(a,value)
        if value==1{
   
            return -1
        }
        s:=value%3
        if s==0{
   
            ans+=value/3
        }else {
   
            ans+=value/3+1
        }
    }
    return ans
}
目录
相关文章
|
2月前
|
开发者
4月更文挑战赛火热启动,寻找热爱技术内容创作的你
开发者社区4月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
3426 30
|
2月前
|
存储
【头歌·计组·自己动手画CPU】五、单总线CPU设计(理论版) 【计算机硬件系统设计】
【头歌·计组·自己动手画CPU】五、单总线CPU设计(理论版) 【计算机硬件系统设计】
479 2
|
2月前
|
人工智能 开发者
7月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区7月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
1357 71
7月更文挑战赛火热启动,坚持热爱坚持创作!
|
2月前
|
Rust Java 开发者
5月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区5月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
1756 150
|
2月前
|
存储 JSON 自然语言处理
大模型服务平台百炼之模型训练与调优实践分享|快来围观~
模型调优是通过Fine-tuning训练模式提高模型效果的功能模块,作为重要的大模型效果优化方式,用户可以通过构建符合业务场景任务的训练集,调整参数训练模型,训练模型学习业务数据和业务逻辑,最终提高在业务场景中的模型效果。
|
2月前
|
敏捷开发 数据可视化 Java
|
26天前
|
算法 数据库
数据库+计网记录
【6月更文挑战第5天】
24 6
数据库+计网记录
|
24天前
|
机器学习/深度学习 资源调度 并行计算
线性回归
【6月更文挑战第7天】线性回归是建立自变量与因变量之间线性关系的模型,常用于预测数值。它假设观测噪声符合正态分布。模型表示为$y=w^Tx+b$,其中$w$是权重,$b$是偏置。损失函数常用平方误差,通过梯度下降法优化。小批量随机梯度下降是常用的更新参数方法。正则化,如L2正则化(权重衰减),用于防止过拟合。丢弃法用于多层感知机,减少模型复杂度。训练时注意数值稳定性,如梯度爆炸和消失,可通过权重初始化、归一化等方法改善。
24 1
|
28天前
快速傅里叶变换
【6月更文挑战第2天】
27 6
|
27天前
Codeforces Round #729 (Div. 2)
【6月更文挑战第4天】在这两个编程问题中,B. Plus and Multiply 要求判断通过加法和乘法操作数组是否能形成目标数 `n`。思路是形如 `x^a + yb = n` 的表达式,如果满足则能构造。C. Strange Function 关注的是找到最小正整数 `x` 使得 `x` 不是 `i` 的因子,计算这些值的和模 `10^9+7`。对于每个 `i`,偶数时 `f(i)` 是 3,奇数时是 2,利用因子与最大公约数计算周期性求和。
11 1