📅  最后修改于: 2023-12-03 15:21:32.058000             🧑  作者: Mango
给定一个整数数组和一个整数k,求由数组中的元素组成的不能被k整除的最长子数组的长度。
可以将输入的数组进行前缀和的预处理,然后遍历每一个前缀和,记录下所有不能被k整除的前缀和的下标。接着,对于相邻的两个不能被k整除的前缀和,它们之间的子数组长度就是一个不能被k整除的最长子数组的长度。最后取所有这样的长度中的最大值即可。
def longest_subarray(nums: List[int], k: int) -> int:
prefix_sum = [0]
for num in nums:
prefix_sum.append((prefix_sum[-1] + num) % k)
hmap = {0: -1}
max_len = 0
for i in range(len(prefix_sum)):
if prefix_sum[i] not in hmap:
hmap[prefix_sum[i]] = i
max_len = max(max_len, i - hmap[prefix_sum[i]])
return max_len