{% tabs %} {% tab title="Python" %}
class Solution:
def minSubarray(self, A: List[int], p: int) -> int:
## 等价于
## 得到全数组的余数是多少
need = sum(A)%p
##dp 代表 余数和idx
last = {0: -1}
res = n = len(A)
cur = 0
for idx, v in enumerate(A):
cur = (cur + v)%p
last[cur] = idx
## python mod 会变正数
if (cur - need + p)%p in last:
res = min(res, idx - last[(cur - need + p)%p])
return -1 if res == n else res
{% endtab %} {% endtabs %}