Contiguous Array
这个题属于trick题,你如果没想出来碰到0的时候应该减1,那这个题就很麻烦了,我们对数组扫描记录累积和,每次碰见1加一,碰见0减一,相当于只要我们一旦碰到一次累积和在之前出现过,我们就对比它和现在记录的最长距离哪个长就行了,也就是只要有key,哈希表就不会变动
class Solution(object):
def findMaxLength(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
store = {0:-1}
tmp = 0
result = 0
for index, num in enumerate(nums):
tmp = tmp + 1 if num else tmp - 1
if tmp not in store:
store[tmp] = index
else:
result = max(result, index - store[tmp])
return result
其实通过这几道利用哈希表解的subarray题可以看出来,哈希表解决子数组问题有几个共性
- 一旦一个key进入了哈希表,后面它的值就不会变了,因为我们要找的通常是一个最长的子数组,而这里的value是下标,出现同样的key肯定是在之后了,所以不用变动key
- 哈希表一般都会有一个0:-1键值对为了计算距离的方便,同时也保证了每次求的区间都是左闭右开区间