Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Số 1 liên tiếp tối đa sau n lần đổi trong JavaScript

Mô tả vấn đề

Chúng ta cần viết hàm JavaScript nhận vào mảng nhị phân arr (chỉ chứa 0 hoặc 1) làm đối số đầu tiên, và số num làm đối số thứ hai.

Ta có thể đổi tối đa num số 0 thành 1. Hàm trả về độ dài mảng con liên tiếp dài nhất chỉ chứa 1 sau khi đổi.

Ví dụ, nếu đầu vào là:

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

Thì đầu ra nên là:

const output = 6;

Giải thích đầu ra

Vì sau khi đổi 2 số 0 thành 1, 6 phần tử cuối mảng sẽ là 1.

Ví dụ minh họa

Mã thực hiện (cửa sổ trượt):

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));

Đầu ra

Kết quả trong console sẽ là:

6