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题可以看出来,哈希表解决子数组问题有几个共性

  1. 一旦一个key进入了哈希表,后面它的值就不会变了,因为我们要找的通常是一个最长的子数组,而这里的value是下标,出现同样的key肯定是在之后了,所以不用变动key
  2. 哈希表一般都会有一个0:-1键值对为了计算距离的方便,同时也保证了每次求的区间都是左闭右开区间

results matching ""

    No results matching ""