3190. 使所有元素都可以被 3 整除的最少操作数
题目描述
给你一个整数数组 nums 。一次操作中,你可以将 nums 中的 任意 一个元素增加或者减少 1 。
请你返回将 nums 中所有元素都可以被 3 整除的 最少 操作次数。
示例 1:
输入:nums = [1,2,3,4]
输出:3
解释:
通过以下 3 个操作,数组中的所有元素都可以被 3 整除:
- 将 1 减少 1 。
- 将 2 增加 1 。
- 将 4 减少 1 。
示例 2:
输入:nums = [3,6,9]
输出:0
提示:
1 <= nums.length <= 501 <= nums[i] <= 50
解法
方法一:计数
我们直接遍历数组 \(\textit{nums}\),对于每个元素 \(x\),如果 \(x \bmod 3 \neq 0\),那么有两种情况:
- 如果 \(x \bmod 3 = 1\),我们可以将 \(x\) 减少 \(1\),使其变为 \(x - 1\),此时 \(x - 1\) 可以被 \(3\) 整除。
- 如果 \(x \bmod 3 = 2\),我们可以将 \(x\) 增加 \(1\),使其变为 \(x + 1\),此时 \(x + 1\) 可以被 \(3\) 整除。
因此,我们只需要统计数组中不能被 \(3\) 整除的元素个数,即可得到最少操作次数。
时间复杂度 \(O(n)\),其中 \(n\) 是数组 \(\textit{nums}\) 的长度。空间复杂度 \(O(1)\)。
1 2 3 | |
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 | |
1 2 3 | |
1 2 3 4 5 | |