JavaScript 中 n 次交换后的最大连续 1

问题

我们需要编写一个 JavaScript 函数,它接受一个二进制 arr(只包含 0 或 1 的数组),arr 作为第一个参数,一个数字 num 作为第二个参数。

我们最多可以将数组中存在的 num 个 0 更改为 1,并且我们的函数应该返回进行这些更改后仅包含 1 的最长(连续)子数组的长度。

例如,如果函数的输入是 -

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

const num = 2;

那么输出应该是 -

const output = 6;

输出说明

因为将两个零改为 1 后,数组的最后 6 个元素将为 1。

示例

此代码将是 -

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

const num = 2;

const longestOnes = (arr = [], num = 1) => {

   let max = 0;

   let left = 0;

   let curr = num;

   for(let right = 0; right < arr.length; right++){

      if(arr[right] === 0){

         curr -= 1;

      };

      while(curr < 0){

         if(arr[left] === 0){

            curr += 1;

         };

         left += 1;

      };

      max = Math.max(max, right - left + 1);

   };

   return max;

};

console.log(longestOnes(arr, num));

输出结果

控制台中的输出将是 -

6

以上是 JavaScript 中 n 次交换后的最大连续 1 的全部内容, 来源链接: utcz.com/z/350487.html

回到顶部