难度中等
给定一个二进制数组 nums
, 找到含有相同数量的 0
和 1
的最长连续子数组,并返回该子数组的长度。
思路:利用题目要求的 数量相同 0 和 1 的连续子数组
采用计数方式统计 1 和 0 ,计数方式如下:
当前数为 1 ,计数加 1;
当前数为 0 ,计数减 1;
上述方式的计数结果,若两个位置之间存在 数量相同 0 和 1 的连续子数组,则两个位置的计数相同,根据数组长度判断是否为最终结果。
代码:
int findMaxLength(vector<int>& nums) {
unordered_map<int,int> data;
int cur=0,ans=0;
data[cur] =-1;
for(int i=0;i<nums.size();++i){
if(nums[i]) ++cur;
else --cur;
if(data.count(cur)){
ans = max(ans, i-data[cur]);
}
else data[cur]=i;
}
return ans;
}