class Solution:
def minSubarray(self, nums: List[int], p: int) -> int:
n = len(nums)
totSum = sum(nums)
if totSum % p == 0:
return 0
for l in range(1, n):
curSum = 0
for i in range(n):
curSum += nums[i]
if i >= l:
curSum -= nums[i - l]
remainSum = totSum - curSum
if remainSum % p == 0:
return l
return -1class Solution:
def minSubarray(self, nums: List[int], p: int) -> int:
total = sum(nums)
remain = total % p
if remain == 0:
return 0
res = len(nums)
cur_sum = 0
remain_to_idx = {0: -1}
for i, n in enumerate(nums):
cur_sum = (cur_sum + n) % p
prefix = (cur_sum - remain + p) % p
if prefix in remain_to_idx:
length = i - remain_to_idx[prefix]
res = min(res, length)
remain_to_idx[cur_sum] = i
return -1 if res == len(nums) else res