思想巧妙:
(1) 把0变成-1;
(2) sum值相同的位置,说明 -1和1的个数相同。
(3) len的计算就是 i-m[sum]
int findMaxLength(vector<int>& nums) {
if(nums.size() == 0 || nums.size() == 1)
return 0;
for(int i=0;i<nums.size();i++) {
if(nums[i] == 0)
nums[i] = -1;
}
int ret = 0;
int sum = 0;
map<int,int> m;
m[0]=-1;
for(int i=0;i<nums.size();i++) {
sum += nums[i];
if(m.find(sum) == m.end())
m[sum] = i;
else {
ret = max(ret,i-m[sum]);
}
}
return ret;
}