📌  相关文章
📜  不能被整数K整除的最长子数组的长度(1)

📅  最后修改于: 2023-12-03 15:21:32.058000             🧑  作者: Mango

不能被整数K整除的最长子数组的长度

给定一个整数数组和一个整数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
复杂度分析
  • 时间复杂度:O(n),其中n是输入数组的长度。
  • 空间复杂度:O(n),需要一个哈希表来存储每一个前缀和后缀下标的映射关系。