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


问题

我们需要编写一个 JavaScript 函数,该函数将二进制数组(仅包含 0 或 1 的数组)arr 作为第一个参数,将数字 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。

Learn JavaScript in-depth with real-world projects through our JavaScript certification course. Enroll and become a certified expert to boost your career.

示例

代码如下 −

 现场演示

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

更新于: 09-Apr-2021

130 次浏览

开启你的 职业生涯

通过完成课程获得认证

入门
广告