- Total Accepted: 4967
- Total Submissions: 14341
- Difficulty: Medium
- Contributors: bishwa
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.
【分析】题意是 给定一个只含有0,1的整数数组,找到数组中最长的一个子序列,该序列中1的个数和0的个数相同。
【思路】0和1的数组,可以考虑吧0换成-1 ,变成1 和-1 的数组,那么本质上就是找室友有下标从i-j的总和为0的子数组
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;
m[0] =-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;
}
};