栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

剑指 Offer II 011. 0 和 1 个数相同的子数组

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指 Offer II 011. 0 和 1 个数相同的子数组

给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。

示例 1:

输入: nums = [0,1]
输出: 2
说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。
示例 2:

输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量 0 和 1 的最长连续子数组。
 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/A1NYOS

【python】前缀和+字典

class Solution:
    def findMaxLength(self, nums: List[int]) -> int:
        #利用前缀和思想+哈希表,定义counter,遇0减1 , 遇1加1.
        counter = 0
        #定义字典,存放前缀和与当前坐标。设置首置位前缀和为0,当数组两个元素的情形,1- (-1) = 2
        preSum = {0:-1}
        #定义最大连续子串长度,如果当前前缀和字典中存在时,那么i - preSum【counter】便是当前等0的连续子串
        maxLen = 0
        for i in range(len(nums)):
            #计算前缀和counter
            counter += 1 if nums[i] == 1 else -1
            #判断字典中是否有当前前缀和, 那么i - preSum【counter】便是当前等0的连续子串
            if counter in preSum:
                maxLen =  max(maxLen,i - preSum.get(counter))
            #没有时,存放counter和当前元素下标,当已经存在不用更新下标,现在求最长连续数组,
            else:
                preSum[counter] = i
        return maxLen

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/822170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号