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

อาร์เรย์ย่อยที่อยู่ติดกันที่มี 0 และ 1 ใน JavaScript


ปัญหา:

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่ใช้อาร์เรย์ไบนารี arr (อาร์เรย์ที่ประกอบด้วย 0 หรือ 1) เท่านั้น ฟังก์ชันของเราควรส่งคืนความยาวของอาร์เรย์ย่อยที่อยู่ติดกันจากอาร์เรย์ที่ประกอบด้วยตัวเลข 1 และ 0 เท่ากัน

ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −

const arr = [1, 0, 0, 1, 0, 1, 0, 0];

จากนั้นผลลัพธ์ควรเป็น −

const output = 6;

คำอธิบายผลลัพธ์

6 องค์ประกอบแรกของอาร์เรย์คือ 1, 0, 0, 1, 0, 1 (สาม 1 วินาทีและสาม 0 วินาที)

ตัวอย่าง

รหัสสำหรับสิ่งนี้จะเป็น −

const arr = [1, 0, 0, 1, 0, 1, 0, 0];
const findMaxLength = (arr = []) => {
   const { length } = arr;
   if (length < 2){
      return 0
   };
   const map = new Map();
   map.set(0, -1);
   let sum = 0;
   let max = 0;
   for (var i = 0; i < length; i++) {  
      sum += arr[i] === 0 ? -1 : 1;
      if (map.has(sum)) {
         max = Math.max(max, i - map.get(sum));
      } else {
         map.set(sum, i);
      };
   };
   return max;
};
console.log(findMaxLength(arr));

คำอธิบายโค้ด

ในที่นี้ เราคิดว่า 0 เป็น -1 และ 1 เป็น 1 และคำนวณผลรวมสำหรับหน้าต่างต่างๆ เมื่อผลรวมเป็น 0 เรารู้ว่าอาร์เรย์ย่อยต้องมีตัวเลขเท่ากับ 0 และ 1

ผลลัพธ์

และผลลัพธ์ในคอนโซลจะเป็น −

6