525. 连续数组
给定一个二进制数组 nums
, 找到含有相同数量的 0
和 1
的最长连续子数组,并返回该子数组的长度。
示例 1:
输入: nums = [0,1]
输出: 2
说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。
示例 2:
输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。
提示:
1 <= nums.length <= 105
nums[i]
不是0
就是1
解题思路
这道题如果用暴力解法的话,就是枚举所有的情况进行判断最大长度,但显然我们不会这么做的!
其实这道题要想快速求解的话,我们需要转换一下题意,这个还是比较难想到的!因为这道题的数组中只有 0
和 1
,那么只要 将数组中的 0
都转化为 -1
,就变成了我们去求数组中和为 0
的一段连续子数组,即变成了 560. 和为 K 的子数组 这道题的特殊情况了!只不过有一些细节问题,因为这道题要求的是长度,而不是个数,所以我们要稍微修改一些细节!
细节修改如下所示:
- 哈希表中存放什么❓❓❓
- 首先哈希表的第一个元素,肯定存放的还是 前缀和的大小,而第二个元素就不一样了,这次要记录的是前缀和的长度,但是我们可以在遍历的时候再进行计算,所以这里第二个元素我们选择存放 此时的下标!
- 什么时候存入哈希表❓❓❓
- 这个和