# 525. 连续数组

# 题目描述

给定一个二进制数组 nums , 找到含有相同数量的 01 的最长连续子数组,并返回该子数组的长度。

示例 1:

输入: nums = [0,1]
输出: 2
说明: [0, 1] 是具有相同数量0和1的最长连续子数组。
1
2
3

示例 2:

输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。
1
2
3
# 解法: 前缀和加哈希表
/**
 * @param {number[]} nums
 * @return {number}
 */
var findMaxLength = function(nums) {
  if(nums.length==0) return 0;
  let maxlength = 0;
  let counter = 0;
  let newMap = new Map();
  newMap.set(0,-1);
  let n = nums.length;
  for(let i=0;i<n;i++){
    let item = nums[i];
    if(item == 1){
      counter ++;
    }else{
      counter --;
    }
    if(newMap.has(counter)){
      maxlength = Math.max(maxlength,i - newMap.get(counter));
    }else{
      newMap.set(counter,i);
    }
  }
  return maxlength;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Last Updated: 1/11/2022, 10:09:22 PM