【英文题目】(学习英语的同时,更能理解题意哟~)
Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1.
Example 1:
Input: [,]
Output:
Explanation: [, ] is the longest contiguous subarray with equal number of and .
Example 2:
Input: [,,]
Output:
Explanation: [, ] (or [, ]) is a longest contiguous subarray with equal number of and .
Note: The length of the given binary array will not exceed 50,000.
【中文题目】
给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。
示例 1:
输入: [,]
输出:
说明: [, ] 是具有相同数量和的最长连续子数组。
示例 2:
输入: [,,]
输出:
说明: [, ] (或 [, ]) 是具有相同数量和的最长连续子数组。
注意: 给定的二进制数组的长度不会超过50000。
【思路】
使用一个变量sum0(初始为0),遍历到0则减1,遍历到1则加1。
同时,使用字典d,key为sum0,value为下标。
当sum0在字典中存在时,说明从d[sum0]到该下标为止的0、1元素个数相同。
【代码】
python版本
class Solution(object):
def findMaxLength(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res =
d = {:-1}
sum0 =
for i, n in enumerate(nums):
if n == :
sum0 -=
else:
sum0 +=
if sum0 in d:
res = max(res, i - d[sum0])
else:
d[sum0] = i
return res
C++版本
class Solution {
public:
int findMaxLength(vector<int>& nums) {
int count = ;
int res = ;
map<int, int> d;
d[] = -1;
for(int i=; i<nums.size(); i++){
if(nums[i] == )
count++;
else
count--;
if(d.find(count) == d.end())
d[count] = i;
else
res = max(res, i - d[count]);
}
return res;
}
};