/*
 * @lc app=leetcode.cn id=525 lang=javascript
 *
 * [525] 连续数组
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @return {number}
 */
var findMaxLength = function (nums) {
  let maxLength = 0, pre = 0;
  const map = new Map();
  map.set(pre, -1);

  for (let i = 0; i < nums.length; i++) {
    pre += nums[i] === 1 ? 1 : -1;
    // 如果存在说明 prevIndex 和 i 之间的 0 和 1 的数量是相同的互相抵消了
    if (map.has(pre)) {
      const prevIndex = map.get(pre);
      maxLength = Math.max(maxLength, i - prevIndex);
    } else {
      map.set(pre, i);
    }
  }
  return maxLength;
};
// @lc code=end
console.log(findMaxLength([0, 1, 1, 1, 1, 1, 0, 0, 0]))