题目
Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1.
Example 1:
Input: [0,1] Output: 2 Explanation: [0, 1] is the longest contiguous subarray with equal number of 0 and 1.
Example 2:
Input: [0,1,0] Output: 2 Explanation: [0, 1] (or [1, 0]) is a longest contiguous subarray with equal number of 0 and 1.
Note: The length of the given binary array will not exceed 50,000.
分析参考Python O(n) Solution with Visual Explanation的解释,遇到0则-1,遇到1则+1,两个相同的count值之间代表一个具有相等0和1个数的子串,构造map<int,int>保存一个count值和对应的下标,找到相同的count值时相减即得到子串的元素个数,对于count=0进行初始化,由于数组下标从0开始,所以count=0的索引初始化为-1。
class Solution {
public:
int findMaxLength(vector<int>& nums) {
map<int,int> index;
int count=0,maxNum=0;
index[0]=-1;
for(int i=0;i<nums.size();++i){
if(nums[i]==0)
count--;
else
count++;
if(index.count(count))
maxNum=max(maxNum,i-index[count]);
else
index[count]=i;
}
return maxNum;
}
};