题目描述:
给定一个二进制数组?nums
?, 找到含有相同数量的?0
?和?1
?的最长连续子数组,并返回该子数组的长度。
示例 1:
输入: nums = [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。
示例 2:
输入: nums = [0,1,0] 输出: 2 说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。
思路:将题目中0化成-1,求最长连续数组即求最长子数组为0的数组,和上一篇文章一样,哈希表中记录最早的子数组和的下标,如果当前位置的和在哈希表中存在,则能求出其长度
代码:
class Solution {
public:
int findMaxLength(vector<int>& nums) {
unordered_map<int,int> hash;
hash[0]=-1;
int sum=0,ret=0;
for(int i=0;i<nums.size();i++)
{
sum+=nums[i]==0?-1:1;
if(hash.count(sum))
ret=max(ret,i-hash[sum]);
else
hash[sum]=i;
}
return ret;
}
};