题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个数组和数字 p,现在可以移除数组内的最短长度的子数组,使得数组和能被 p 整除。

思路分享

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def minSubarray(self, nums: List[int], p: int) -> int:
accu_sum = list(accumulate(nums, initial=0))
left = accu_sum[-1] % p
if left == 0:
return 0

rec = {}
ans = n = len(nums)
for i, num in enumerate(accu_sum):
rec[num % p] = i
last_index = rec.get((num-left) % p, -n)
ans = min(ans, i-last_index)
return ans if ans < n else -1