给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组。
示例 1:
输入: [0,1]
输出: 2
说明: [0, 1] 是具有相同数量0和1的最长连续子数组。
示例 2:
输入: [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。
不想做重复的工作,这道题和523 560一模一样,如果你想弄懂前缀和的这个解法,建议先看560,再看523,我在另外两篇博客中写得很详细了
具体见https://buptwc.github.io/2018/07/10/Leetcode-523-Continuous-Subarray-Sum/
当你看懂前两道题后再来分析这道题,将所有的0变成-1,这道题就变成找最长的和为0的连续子数组,前缀和可解
思路:
(建议先看560,否则你可能不知道我在说什么)
- 改用字典存储已经遍历过的值,对应相应的下标,即d[sum(nums[:i])] = i,相同的key值取最小(最左边)的下标
- 依次遍历判断,若成功找到key值,存储一次长度
1 | class Solution(object): |