文章作者:Tyan
博客:noahsnail.com | CSDN | 简书
1. Description

2. Solution
**解析:**Version 1,使用前缀和来解决,遍历数组,求前缀和,求前缀和与k的余数,余数在字典中存在时,则意味着当前前缀和减去之前的前缀和等于k的倍数,此时计算两个前缀和的长度差,如果大于等于2,则返回True,如果余数不存在,则将余数保存在字典中并记录其索引位置。由于余数相同时不会更新索引,因此,字典中前缀和余数相同时,保存的是最靠前的位置。注意,假设第一个数就等于k的倍数,此时数组中没有余数0的位置,因此stat[0]=-1,这样计算的长度才不会错。
- Version 1
class Solution:
def checkSubarraySum(self, nums: List[int], k: int) -> bool:
n = len(nums)
total = 0
stat = {}
stat[0] = -1
for i in range(n):
total += nums[i]
remainder = total % k
if remainder in stat:
length = i - stat[remainder]
if length > 1:
return True
else:
stat[remainder] = i
return False
本文介绍了如何使用前缀和解决LeetCode上的连续子数组和问题。作者Tyan提供了Version1的解决方案,通过遍历数组计算前缀和,利用字典存储前缀和的余数及其索引,找到满足条件的子数组并返回结果。文章适合对算法和LeetCode感兴趣的读者阅读。
422

被折叠的 条评论
为什么被折叠?



