给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。
示例 1:
输入: [0,1] 输出: 2 说明: [0, 1] 是具有相同数量0和1的最长连续子数组。
示例 2:
输入: [0,1,0] 输出: 2 说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。
class Solution {
public:
int findMaxLength(vector<int>& nums) {
unordered_map <int, int> hash;
//在这里的话我们通过将 0 转换为 -1 ;这样子的话,这道题目就变成了 数据串中 最长的 和为0 的序列
int s =0;
int result =0;
hash[0] = -1; //在这里的话,我们进行一下初始化,原因是如果 最开始是以 0 开始的一串数字 sum(-1) = 0;,下标0
for (int i=0;i<nums.size(); i++){
s += nums[i] ?1 :-1;// 在这里我们对前缀和进行相加,
if (hash.count(s)) {
result = max(result, i - hash[s]);// hash 里面值的存的数据为 字符串的下标
}
else {
hash[s] = i;// hash 的value 为 下标,如果 和为s 之前已经出现过的话,就不能往里面相加了
}
}
return result;
}
};
// 加油加油 Try to make yourself more excellent...