4.前缀和

知识点

例题

力扣1590:

思路解析

参考代码

class Solution:
    def minSubarray(self, nums: List[int], p: int) -> int:
        s = list(accumulate(nums, initial=0))
        x = s[-1] % p
        if x == 0: return 0  # 移除空子数组(这行可以不要)

        ans = n = len(nums)
        last = {}
        for i, v in enumerate(s):
            last[v % p] = i
            j = last.get((v - x) % p, -n)  # 如果不存在,-n 可以保证 i-j >= n
            ans = min(ans, i - j)
        return ans if ans < n else -1