525. 连续数组(Python)

题目

难度:★★★☆☆
类型:数组
方法:前缀和

力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录

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

示例

示例 1:

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

示例 2:

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

注意: 给定的二进制数组的长度不会超过50000。

解答

我们这样设想,把数组中的所有零看做1,准备一个变量s,用来存储从第一个元素开始,一直到第n个元素的和,如果绘制出s关于n的函数图像,就可以看到这是一条有上升也有下降的折线,在这条折线上,纵坐标相等的点对应的横坐标index1和index2,(index1

class Solution:
    def findMaxLength(self, nums):
        dp, cur, res = {0: -1}, 0, 0
        for idx, num in enumerate(nums):
            cur += 1 if num == 1 else -1
            res = max(res, idx - dp.setdefault(cur, idx))
        return res

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

你可能感兴趣的:(525. 连续数组(Python))