您的位置:首页 > 其它

给定一个二进制数组,找到一个连续的0和1相等的最大子数组。

2017-12-09 11:30 441 查看
本题源自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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐