题目:525. Contiguous Array
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.
分析
思路来源于网上的方法,先把0转换成-1来进行遍历,然后用map存储每次累加的sum,如果sum在map里面出现过,则说明map里面出现的那个值的索引的开始(不包括索引),到目前的索引的和为0,也就是此时0和1的数目相等,同时通过max来记录最长的子数组长度。
代码
class Solution {
public:
int findMaxLength(vector<int>& nums) {
int result =0,sum =0;
for(int i =0;i<nums.size();i++){
if(nums[i]==0) nums[i]=-1;
}
map<int,int> m; //map的first存储sum,second存储索引
m[0] = -1; //注意初始化为-1
for(int i=0;i<nums.size();i++){
sum+=nums[i];
if(m.find(sum)!= m.end()) result =max(result,i-m[sum]);
else m[sum] = i;
}
return result;
}
};