给定一个二进制数组,找到一个连续的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;
}
--------------------------------------------------------------------
思路:
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;
}
相关文章推荐
- 给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字), 使得这个“子数组”的和是所有“子数组”和中最大的
- 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。
- 说你有一个数组,其中第i个元素是第i天给定股票的价格。设计一个算法来找到最大的利润,最多可以完成两个交易。
- 在一个数组中找到连续的子数组最大的乘积
- 给定一个数组,求连续的最大字数组
- JAVA :在给定一个数组中,可以取得多个连续的子串。在众多子串中,求各元素和为最大值的连续子串!
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 每天一道LeetCode-----找到给定数组的连续子数组,使这个子数组的和最大,要求复杂度为O(n)
- 给定无序数组A,在线性时间内找到i和j,j>i,并且保证A[j]-A[i]是最大的。
- 一个数组中连续子数组的最大和
- 算法习题45:对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一;;;一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 如果给定一个数组arr[0,...N-1],要求找出相邻两个数的最大差值
- 给定一个数组,找出这个和最大的连续子数组的和
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- 找出给定数数组里连续的元素和的最大值
- 求一个乱序数组的元素最大连续长度
- 《求一个数组的连续的最大子数组之和》
- 【美团】有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。 给定数组A及它的大小n,请返回最大差值
- 编写一个能将给定非负整数数组中的数字排列成最大数字的函数
- 每天一道LeetCode-----在给定数组中找到一个子数组,使得这个子数组的元素乘积最大