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