📖 Scenario: You are managing a calendar that stores booked time intervals as a sorted list of non-overlapping intervals. When a new meeting request comes in, you need to insert it into the calendar, merging any overlapping intervals to keep the list sorted and non-overlapping.
🎯 Goal: Build a program that inserts a new interval into a sorted list of non-overlapping intervals and merges any overlapping intervals.
📋 What You'll Learn
Create a vector of intervals represented as pairs of integers
Add a new interval to the list and merge overlapping intervals
Print the final list of merged intervals
💡 Why This Matters
🌍 Real World
Managing calendar events, booking systems, or any timeline where intervals must be merged to avoid conflicts.
💼 Career
Useful for software engineers working on scheduling apps, resource allocation, or time management tools.
Progress0 / 4 steps
1
Create the initial sorted list of intervals
Create a vector called intervals with these exact intervals: {1, 3}, {6, 9}
DSA C++
Hint
Use std::vector of std::pair<int, int> to store intervals.
2
Add the new interval to insert
Create a variable called newInterval of type std::pair<int, int> and set it to {2, 5}
DSA C++
Hint
Use std::pair<int, int> to represent the new interval.
3
Insert and merge the new interval
Write code to insert newInterval into intervals and merge overlapping intervals. Use a vector called merged to store the result. Iterate over intervals with for (const auto &interval : intervals) and merge accordingly.
DSA C++
Hint
Compare intervals to newInterval to decide if you add directly or merge.
4
Print the merged intervals
Use a for loop with const auto &interval to iterate over merged and print each interval in the format [start, end] separated by spaces.
DSA C++
Hint
Print intervals with brackets and commas, separated by spaces.
Practice
(1/5)
1. What is the main goal when inserting a new interval into a sorted list of non-overlapping intervals?
easy
A. To merge overlapping intervals and keep the list sorted
B. To add the new interval at the end without merging
C. To remove all intervals that come before the new interval
D. To sort the intervals again after insertion without merging
Solution
Step 1: Understand the problem context
We have a sorted list of intervals that do not overlap. When inserting a new interval, we must keep the list sorted and merge any overlapping intervals.
Step 2: Identify the correct approach
Simply adding the new interval without merging can cause overlaps. Sorting again without merging breaks the non-overlapping property. Removing intervals before the new one is incorrect.
Final Answer:
To merge overlapping intervals and keep the list sorted -> Option A
Quick Check:
Insert Interval = Merge and keep sorted [OK]
Hint: Always merge overlapping intervals after insertion [OK]
Common Mistakes:
Inserting without merging overlaps
Sorting intervals again without merging
Removing intervals unnecessarily
2. Which of the following C++ code snippets correctly declares a vector of intervals where each interval is a pair of integers?
easy
A. std::vector intervals;
B. std::vector intervals;
C. std::vector intervals;
D. std::vector> intervals;
Solution
Step 1: Understand vector and pair syntax
In C++, a vector of pairs is declared as std::vector>. The pair must specify both types inside angle brackets.
Step 2: Check each option
std::vector> intervals; correctly uses std::pair. std::vector intervals; is invalid syntax for vector. std::vector intervals; misses the second type in pair. std::vector intervals; misses template parameters for pair.
Final Answer:
std::vector> intervals; -> Option D
Quick Check:
Vector of pairs syntax = std::vector> intervals; [OK]
Hint: Use std::vector> for intervals [OK]
Common Mistakes:
Missing template parameters in pair
Incorrect vector declaration syntax
Using incomplete pair types
3. Given the sorted intervals [(1, 3), (6, 9)] and a new interval (2, 5), what will be the resulting list after insertion and merging?
medium
A. [(1, 3), (2, 5), (6, 9)]
B. [(1, 5), (6, 9)]
C. [(2, 5), (6, 9)]
D. [(1, 9)]
Solution
Step 1: Identify overlapping intervals
The new interval (2, 5) overlaps with (1, 3) because 2 <= 3. They should be merged into (1, 5).
Step 2: Merge and keep other intervals
After merging (1, 3) and (2, 5) into (1, 5), the interval (6, 9) remains unchanged.
Hint: Merge intervals if new start ≤ existing end [OK]
Common Mistakes:
Not merging overlapping intervals
Inserting without sorting
Merging all intervals incorrectly
4. Consider the following C++ code snippet for inserting an interval into a sorted list of intervals:
std::vector> insertInterval(std::vector>& intervals, std::pair newInterval) {
std::vector> result;
int i = 0;
while (i < intervals.size() && intervals[i].second < newInterval.first) {
result.push_back(intervals[i]);
i++;
}
while (i < intervals.size() && intervals[i].first <= newInterval.second) {
newInterval.first = std::min(newInterval.first, intervals[i].first);
newInterval.second = std::max(newInterval.second, intervals[i].second);
i++;
}
result.push_back(newInterval);
while (i < intervals.size()) {
result.push_back(intervals[i]);
i++;
}
return result;
}
What is the bug in this code if any?
medium
A. No bug; the code correctly inserts and merges intervals
B. The first while loop condition should use <= instead of <
C. The second while loop should check intervals[i].second instead of intervals[i].first
D. The newInterval is not pushed back at the correct position
Solution
Step 1: Analyze the first while loop
The first loop adds all intervals that end before the new interval starts, correctly skipping non-overlapping intervals before newInterval.
Step 2: Analyze the second while loop
The second loop merges all intervals overlapping with newInterval by updating its start and end correctly.
Step 3: Analyze the final steps
After merging, newInterval is added, then remaining intervals are appended. This maintains sorted order and merges properly.
Final Answer:
No bug; the code correctly inserts and merges intervals -> Option A
Quick Check:
Code logic matches insert and merge steps [OK]
Hint: Check loop conditions carefully for overlap and order [OK]
Common Mistakes:
Changing loop conditions incorrectly
Pushing newInterval too early or late
Merging intervals incorrectly
5. You have a sorted list of intervals: [(1, 2), (3, 5), (6, 7), (8, 10), (12, 16)]. You want to insert a new interval (4, 8). What is the final list after insertion and merging?