3190. 使所有元素都可以被 3 整除的最少操作数

最少操作次数:使数组所有元素都能被 3 整除

在日常编程题目中,常常会遇到类似的问题:给定一个数组,要求在最少的操作次数内,将数组中的所有元素转化成满足某种条件的数。今天,我们就来探讨一个有趣且简单的问题:给定一个整数数组,要求在最少的操作次数内,将数组中所有元素都变成可以被 3 整除的数

问题描述

给定一个整数数组 nums,你可以在一次操作中选择数组中的任意一个元素,然后将该元素加 1 或减 1。你需要计算出最少需要多少次操作,才能使数组中的所有元素都能被 3 整除。

我们通过分析如何将任意一个整数转换成可以被 3 整除的数,来推导出最优解法。

数学分析

我们可以利用 除以 3 的余数 来快速判断一个数是否可以被 3 整除。一个数 x 除以 3 后的余数有 3 种可能的结果:

  • 余数为 0:说明这个数本身就可以被 3 整除,不需要进行任何操作。
  • 余数为 1:这个数需要变成 3 的倍数,可以通过减去 1 或加上 2 来实现。显然,至少需要 1 次操作。
  • 余数为 2:这个数也需要变成 3 的倍数,可以通过加 1 或减去 2 来实现。同样,至少需要 1 次操作。

因此,问题的关键就是计算每个数离 3 的倍数有多远,并尽量用最少的操作次数来达到目标。

解题思路

1. 对每个数取余数

对于数组中的每个元素,我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值