列表

详情


525. 连续数组

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

 

示例 1:

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

示例 2:

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

 

提示:

相似题目

和等于 k 的最长子数组长度

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int findMaxLength(vector<int>& nums) { } };

python3 解法, 执行用时: 212 ms, 内存消耗: 19.7 MB, 提交时间: 2022-11-23 11:31:06

class Solution:
    def findMaxLength(self, nums: List[int]) -> int:
        mp = {0: -1}
        counter = 0
        maxLength = 0
        for i, num in enumerate(nums):
            if num == 1:
                counter += 1
            else:
                counter -= 1
            
            if counter in mp:
                maxLength = max(maxLength, i - mp[counter])
            else:
                mp[counter] = i
            
        return maxLength

golang 解法, 执行用时: 100 ms, 内存消耗: 7.2 MB, 提交时间: 2022-11-23 11:23:30

func findMaxLength(nums []int) (maxLength int) {
    mp := map[int]int{0: -1}
    counter := 0
    for i, num := range nums {
        if num == 1 {
            counter++
        } else {
            counter--
        }
        if prevIndex, has := mp[counter]; has {
            maxLength = max(maxLength, i-prevIndex)
        } else {
            mp[counter] = i
        }
    }
    return
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

上一题