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

การแทรกช่วงเวลาใหม่ในอาร์เรย์ที่เรียงลำดับของช่วงเวลาใน JavaScript


สำหรับวัตถุประสงค์ของคำถามนี้ เรากำหนดช่วงเวลาเป็นอาร์เรย์ของตัวเลขสองตัว โดยที่หมายเลขแรกจะน้อยกว่าตัวเลขที่สองเสมอ

ตัวอย่างเช่น −

[4, 6], [2, 3], [6, 8], [2, 7], [1, 8] are all examples of valid intervals.

สมมติว่าเรามีอาร์เรย์ของช่วงเวลาที่จัดเรียงตามเวลาเริ่มต้น (องค์ประกอบแรกของแต่ละช่วงเวลา)

ช่วงเวลาในอาร์เรย์จะไม่ทับซ้อนกันซึ่งหมายความว่าสำหรับช่วงเวลาที่อยู่ติดกันสองช่วงใด ๆ

[m, n], [x, y]
m < n < x < y

ดังนั้น ตัวอย่างหนึ่งของอาร์เรย์ของช่วงเวลานี้สามารถเป็น −

const arr = [[ 2, 4], [5, 7], [9, 10], [13, 17]];

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับช่วงหนึ่งเช่นอาร์กิวเมนต์แรกและช่วงเดียวเป็นอาร์กิวเมนต์ที่สอง

ฟังก์ชันควรแทรกช่วงเวลาในตำแหน่งที่ถูกต้องในอาร์เรย์ รักษาคุณสมบัติที่ไม่ทับซ้อนกันของอาร์เรย์

หากจำเป็น เราสามารถรวมช่วงเวลาตั้งแต่สองช่วงขึ้นไปในอาร์เรย์เพื่อไม่ให้ช่วงอาร์เรย์ไม่ทับซ้อนกัน

ตัวอย่างเช่น ถ้าสำหรับอาร์เรย์ของช่วงข้างต้น ช่วงเวลาที่เราต้องแทรกคือ [6, 13]จากนั้นผลลัพธ์ควรมีลักษณะดังนี้ -

const output = [[2, 4], [5, 17]];

ตัวอย่าง

ต่อไปนี้เป็นรหัส -

const arr = [[2, 4], [5, 7], [9, 10], [13, 17]];
const interval = [6, 13];
const insertWithin = (arr = [], interval = []) => {
   const res = [];
   let ind = 0;
   while (arr[ind] && arr[ind][1] < interval[0]) {
      res.push(arr[ind]);
      ++ind;
   };
   let start = interval[0];
   let end = interval[1];
   while (arr[ind] && arr[ind][0] <= interval[1]) {
      start = Math.min(start, arr[ind][0]);
      end = Math.max(end, arr[ind][1]);
      ++ind;
   }
   res.push([start, end]);
   while (arr[ind]) {
      res.push(arr[ind]);
      ++ind;
   }
   return res;
};
console.log(insertWithin(arr, interval));

ผลลัพธ์

ต่อไปนี้เป็นเอาต์พุตคอนโซล -

[[2, 4], [5, 17]]