Maximum Size Subarray Sum Equals k
这道题主要是关于实现算法比较难以想到,这里需要结合prefix sum数组和哈希表来一起维护,同时这道题里还有很多隐藏问题,比如k - sum等于sum怎么办?哈希表需要记录同一个prefixsum出现的所有位置吗?我们真的需要先把prefixSum数组建起来之后再开始检查吗?
对于第一个问题和第二个问题,解决的方法都是一样的,我们的哈希表不要记录同一个prefixSum的多个位置,只需要记录它的第一次出现的位置,道理很简单,越早出现的位置自然子数组越长,因为这个原因的存在,第一个问题的情况就保证了k - sum和当前的sum两个位置是肯定不一样的,对于第三个问题,我们可以发现我们每次都是找以当前位置为这个子数组末尾时的情况,这样看的话,我们完全可以一边遍历一遍记prefixSum这个值就行了,而不用真的去维护一个额外的数组
class Solution(object):
def maxSubArrayLen(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
table = {}
cumSum = 0
result = 0
for index, num in enumerate(nums):
cumSum += num
if cumSum == k:
result = max(result, index + 1)
if cumSum - k in table:
result = max(result, index - table[cumSum - k])
if cumSum not in table:
table[cumSum] = index
return result