What if you could add new events to your schedule without worrying about overlaps or order?
Why Insert Interval into Sorted List in DSA Javascript?
Imagine you have a list of booked meeting times sorted by start time. You want to add a new meeting without messing up the order or overlapping times.
Manually checking each meeting to find where to insert the new one is slow and confusing. You might miss overlaps or put the new meeting in the wrong place, causing scheduling chaos.
Using the Insert Interval method, you can quickly find the right spot and merge overlapping meetings automatically. This keeps your schedule neat and accurate without extra effort.
let meetings = [[1,3],[6,9]]; // Manually check and insert new meeting // Check overlaps and reorder manually
function insertInterval(intervals, newInterval) {
let result = [];
let i = 0;
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
result.push(intervals[i]);
i++;
}
while (i < intervals.length && intervals[i][0] <= newInterval[1]) {
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
i++;
}
result.push(newInterval);
while (i < intervals.length) {
result.push(intervals[i]);
i++;
}
return result;
}This method lets you keep your schedule or timeline perfectly sorted and merged, making complex time management simple and error-free.
When booking rooms for meetings, this method helps add new bookings without double-booking or losing track of free times.
Manual insertion is slow and error-prone.
Insert Interval merges overlapping intervals automatically.
Keeps the list sorted and clean with minimal effort.
Practice
Solution
Step 1: Understand the problem context
We have a sorted list of intervals with no overlaps, and we want to insert a new interval.Step 2: Identify the correct approach
We must merge any intervals that overlap with the new one and keep the list sorted.Final Answer:
To merge overlapping intervals and keep the list sorted -> Option BQuick Check:
Insert interval = merge and sort [OK]
- Inserting without merging overlaps
- Appending without sorting
- Removing unrelated intervals
Solution
Step 1: Recall JavaScript array methods
JavaScript arrays use push() to add elements at the end.Step 2: Match method to syntax
push() is correct; insert(), add(), and append() are not valid JavaScript array methods.Final Answer:
intervals.push([3,5]) -> Option AQuick Check:
Use push() to add elements in JS arrays [OK]
- Using insert() which is not a JS array method
- Using add() or append() from other languages
- Forgetting to add as an array element
const intervals = [[1,2],[5,6]];
const newInterval = [3,5];
function insertInterval(intervals, newInterval) {
const result = [];
let i = 0;
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
result.push(intervals[i]);
i++;
}
while (i < intervals.length && intervals[i][0] <= newInterval[1]) {
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
i++;
}
result.push(newInterval);
while (i < intervals.length) {
result.push(intervals[i]);
i++;
}
return result;
}
console.log(insertInterval(intervals, newInterval));Solution
Step 1: Process intervals before newInterval
Intervals before newInterval are [[1,2]] because 2 < 3, so push [1,2].Step 2: Merge overlapping intervals
Intervals overlapping with newInterval are [5,6] because 5 <= 5. Merge [3,5] and [5,6] to get [3,6].Step 3: Add merged interval and remaining intervals
Push merged [3,6]. No intervals left after merging.Final Answer:
[[1,2],[3,6]] -> Option DQuick Check:
Merged intervals = [[1,2],[3,6]] [OK]
- Not merging overlapping intervals
- Adding newInterval multiple times
- Incorrectly ordering intervals after merge
function insert(intervals, newInterval) {
let result = [];
let i = 0;
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
result.push(intervals[i]);
i++;
}
while (i < intervals.length && intervals[i][0] < newInterval[1]) {
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
i++;
}
result.push(newInterval);
while (i < intervals.length) {
result.push(intervals[i]);
i++;
}
return result;
}Solution
Step 1: Analyze the second while loop condition
The second loop merges overlapping intervals. It uses intervals[i][0] < newInterval[1], which misses intervals starting exactly at newInterval[1].Step 2: Correct the condition
Change < to <= to include intervals starting at newInterval[1] for proper merging.Final Answer:
The second while condition should use <= instead of < -> Option CQuick Check:
Use <= to merge intervals starting at newInterval[1] [OK]
- Using < instead of <= in merge condition
- Pushing newInterval too early
- Not initializing result array
Solution
Step 1: Identify intervals before newInterval
Interval [1,3] overlaps with newInterval [2,5] because 3 >= 2, so no intervals come before without overlap.Step 2: Merge overlapping intervals
Merge [1,3] and [2,5] to get [1,5]. Interval [6,9] does not overlap and stays as is.Final Answer:
[[1,5],[6,9]] -> Option AQuick Check:
Merged intervals = [[1,5],[6,9]] [OK]
- Not merging overlapping intervals
- Adding newInterval without merging
- Merging unrelated intervals
Ready to prove it?
Pass the test and this pattern moves unknown
