LeetCode--Python解析【Contiguous Array】(525)

题目:


方法:

首先考虑如何计算具有相同数量的0和1,可以通过将0转换为-1,若长度n的元素之和为0,则说明n个元素中的0与1的个数相等。若前n个元素之和等于前n+j个元素之和,则n到n+j个元素中的0与1个数相等。

可以通过2*nums[i] -1的方法,将nums中的0转换为1。

接下来创建一个dict,键值为元素累加求和,value为最后一个累加元素的角标

遍历的同时,当前元素与dict中键值相同元素(前n项和相同元素)的最大差值,也就是当出现也就是0,1个数相等子串的最长长度。

最后返回最大的长度值。

有一点需要说明就是dict1中初始设置{0:-1},是因为list的下标从0开始,故前0个元素的和为0,下标为-1。

class Solution:
    def findMaxLength(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        dmap = {0 : -1}
        res = total = 0
        for i, n in enumerate(nums):
            total += 2 * nums[i] - 1
            if total in dmap:
                res = max(res, i - dmap[total])
            else:
                dmap[total] = i
        return res

猜你喜欢

转载自blog.csdn.net/zjrn1027/article/details/80311009