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。

示例

程式碼如下 −

 現場演示

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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

入門
廣告