สำหรับวัตถุประสงค์ของคำถามนี้ เรากำหนดช่วงเวลาเป็นอาร์เรย์ของตัวเลขสองตัว โดยที่หมายเลขแรกจะน้อยกว่าตัวเลขที่สองเสมอ
ตัวอย่างเช่น −
[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]]