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