中等
给你一个整数数组 nums 和一个整数 k。
如果一个子数组的和能够被 k 整除,或者在 将该子数组中的一个元素取反 后能使和被 k 整除,则称该子数组是 有效的 。
将一个元素取反意味着将其值 x 替换为 -x。
返回 最长有效子数组的长度 。如果不存在有效的子数组,则返回 0。
子数组 是数组中一个连续且非空的元素序列。
示例 1:
输入: nums = [4,1,2], k = 3
输出: 3
解释:
- 整个数组的和为 7,且
7 % 3 = 1,因此它不能被k = 3整除。 - 将
nums[2] = 2取反,其和变为4 + 1 − 2 = 3,能够被k整除。 - 因此,整个数组是一个有效子数组,其长度为 3。
示例 2:
输入: nums = [5,3,4], k = 7
输出: 2
解释:
- 整个数组的和为 12,且将其中任何一个元素取反都无法使其和被 7 整除。
- 然而,子数组
[3, 4]的和为 7,无需任何取反操作即可被k = 7整除。 - 因此,最长有效子数组的长度为 2。
示例 3:
输入: nums = [2,2,5], k = 6
输出: 2
解释:
- 整个数组的和为 9,且将其中任何一个元素取反都无法使其和被 6 整除。
- 子数组
[2, 2]的和为 4。将其中任意一个元素取反会使其变为[-2, 2]或[2, -2],这两者的和皆为 0。 - 因此,最长有效子数组的长度为 2。
提示:
1 <= nums.length <= 1000-105 <= nums[i] <= 1051 <= k <= 105