ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ไบนารี arr (มีแค่ 0 และ 1) เป็นอาร์กิวเมนต์แรก และตัวเลข num เป็นอาร์กิวเมนต์ที่สอง
เราสามารถเปลี่ยน 0 ในอาร์เรย์เป็น 1 ได้สูงสุด num ครั้ง ฟังก์ชันควรคืนค่าความยาวของซับอาร์เรย์ติดกันที่มีแค่ 1 มากที่สุดหลังจากการเปลี่ยนแปลง
ตัวอย่างเช่น หากอินพุตคือ
const arr = [1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0]; const num = 2;
ผลลัพธ์ควรเป็น
const output = 6;
คำอธิบายผลลัพธ์
เพราะหลังจากเปลี่ยน 0 สองตัวเป็น 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