本题源自leetcode 525
--------------------------------------------------------------------
思路:
1 用一个map 做映射 记录0 1 的数出现次数的差,值为数组下标。初始化mp[0] = -1;
代码:
int findMaxLength(vector<int>& nums) {
int n = nums.size();
if(n == 0)
return 0;
unordered_map<int,int> mp; //记录 0 和 1的差值,以及下标 。
mp[0] = -1;
int one = 0;
int zero = 0;
int len = 0;
for(int i = 0; i < n;i++){
if(nums[i] == 0)
zero++;
else
one++;
if(mp.count(zero - one)){
len = max(len,i - mp[zero - one]);
}else
mp[zero - one] = i;
}
return len;
}