包含 0 和 1 的 JavaScript 连续子数组


问题

我们需要编写一个 JavaScript 函数,它接收一个二进制数组 arr(仅包含 0 或 1 的数组)。我们的函数应该返回数组中由相同数量的 1 和 0 组成的连续子数组的长度。

例如,如果输入函数的内容为 −

const arr = [1, 0, 0, 1, 0, 1, 0, 0];

那么输出应该为 −

const output = 6;

输出说明

数组前 6 个元素是 1、0、0、1、0、1(三个 1 和三个 0)

示例

代码如下 –

 动态演示

const arr = [1, 0, 0, 1, 0, 1, 0, 0];
const findMaxLength = (arr = []) => {
   const { length } = arr;
   if (length < 2){
      return 0
   };
   const map = new Map();
   map.set(0, -1);
   let sum = 0;
   let max = 0;
   for (var i = 0; i < length; i++) {  
      sum += arr[i] === 0 ? -1 : 1;
      if (map.has(sum)) {
         max = Math.max(max, i - map.get(sum));
      } else {
         map.set(sum, i);
      };
   };
   return max;
};
console.log(findMaxLength(arr));

代码说明

在这里,我们将 0 视为 -1,1 视为 1,并计算不同窗口的总和,当总和为 0 时,我们就知道子数组必须包含相同数量的 0 和 1。

输出

控制台中的输出为 −

6

更新于:03-Mar-2021

255 次浏览

开启您的职业生涯

完成课程,获得认证

开始
广告