//数组题目001
//
//给定一个只有 0,1 的数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。
//
//
//示例 1:
//
//
//输入: [0, 1]
//
// 输出 : 2
//
// 说明 : [0, 1] 是具有相同数量0和1的最长连续子数组。
//
// 输入 : [0, 1]
//
//
// 输出 : 2
//
//
// 说明 : [0, 1] 是具有相同数量0和1的最长连续子数组。
//
//
// 示例 2 :
//
//
// 输入 : [0, 1, 0]
//
// 输出 : 2
//
// 说明 : [0, 1](或[1, 0]) 是具有相同数量0和1的最长连续子数组。
//
int maxLengthArr(vector<int> &nums)
{
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] == 0)
{
nums[i] = -1;
}
}
int ret =0;
int sum = 0;
map<int, int> sumMap;
for (int i = 0; i < nums.size(); i++)
{
sum += nums[i];
if (sum == 0)
{
ret = ret + 1;
}
auto it = sumMap.find(sum);
if (it == sumMap.end())
{
sumMap[sum] = i;
continue;
}
int tmp = i - sumMap[sum];
if (tmp > ret)
{
ret = tmp;
}
}
return ret;
}