Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

หาความยาว 1 ติดกันสูงสุดหลังสลับ 0 เป็น 1 ได้ n ครั้งใน JavaScript


ปัญหา

เราต้องเขียนฟังก์ชัน 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