题目链接: 连续数组
使用方法: 前缀和数组+哈希化
假设对于数组[i…j], pre[i]表示0到i中1的个数减去0的个数的值, 那么如果pre[j] - pre[i - 1] == 0, 那么说明i…j中0和1的数量相同,因此只需要用哈希表记录pre[i]的值即可
class Solution {
public:
unordered_map<int, int> m;
int findMaxLength(vector<int>& nums) {
int ans = 0;
unordered_map<int, int> m;
int counter = 0; // counter记录1-0的值
m[0] = -1;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == 1) counter++;
else counter--;
if (m.count(counter)) ans = max(ans, i - m[counter]); // 表明有pre[i], 那么求最大值
else m[counter] = i; // 如果没有就放入哈希表
}
return ans;
}
};