Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

สูงสุด 1 วินาทีติดต่อกันหลังจาก n swaps ใน JavaScript


ปัญหา

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