



class Solution {
public:
int findMaxLength(vector<int>& nums)
{
//将数组中所有0变为-1
for(auto& e : nums)
{
if(e == 0) e = -1;
}
//找一段和为0的最长子数组
int ret = 0,sum = 0;
unordered_map<int,int> hash;
hash[0] = -1;
for(int i = 0;i<nums.size();i++)
{
sum += nums[i];
if(hash.count(sum)) ret = max(ret,i-hash[sum]);
else hash[sum] = i;
}
return ret;
}
};