📖 Scenario: Imagine you have a schedule with several meetings, each represented as a time interval. Some meetings overlap, and you want to remove the fewest number of meetings so that the remaining meetings do not overlap.
🎯 Goal: Build a program that finds the minimum number of intervals to remove to make the rest of the intervals non-overlapping.
📋 What You'll Learn
Create a list of intervals with exact start and end times
Add a variable to count removals
Sort intervals by their end time
Use a loop to find overlapping intervals and count removals
Print the minimum number of intervals to remove
💡 Why This Matters
🌍 Real World
Scheduling meetings, booking rooms, or planning events without conflicts.
💼 Career
Helps in understanding greedy algorithms and interval scheduling problems common in software engineering.
Progress0 / 4 steps
1
Create the list of intervals
Create a list of integer arrays called intervals with these exact intervals: [1, 3], [2, 4], [3, 5], [6, 7], [8, 10], [9, 11].
DSA C#
Hint
Use List<int[]> and add each interval as new int[] {start, end}.
2
Add a variable to count removals
Add an integer variable called removals and set it to 0 to count how many intervals we remove.
DSA C#
Hint
Declare int removals = 0; after the intervals list.
3
Sort intervals and count removals
Sort the intervals list by the end time of each interval using intervals.Sort((a, b) => a[1].CompareTo(b[1])). Then create an integer variable prevEnd set to the end time of the first interval. Use a for loop starting from index 1 to the end of intervals. Inside the loop, if the start time of the current interval is less than prevEnd, increment removals. Otherwise, update prevEnd to the end time of the current interval.
DSA C#
Hint
Sort by end time, then loop from second interval checking if start is less than previous end.
4
Print the minimum removals
Print the value of removals using Console.WriteLine(removals);.
DSA C#
Hint
Use Console.WriteLine(removals); to show the result.
Practice
(1/5)
1. What is the main goal of the Non Overlapping Intervals Minimum Removal problem?
easy
A. To sort intervals by their start time
B. To remove the minimum number of intervals so that the remaining intervals do not overlap
C. To merge all intervals into one big interval
D. To find the maximum number of overlapping intervals
Solution
Step 1: Understand the problem goal
The problem asks to remove as few intervals as possible so that no two intervals overlap.
Step 2: Clarify what non-overlapping means
Non-overlapping means for any two intervals, one ends before the other starts.
Final Answer:
To remove the minimum number of intervals so that the remaining intervals do not overlap -> Option B
Quick Check:
Minimum removal = no overlaps [OK]
Hint: Focus on removing intervals, not merging or counting overlaps [OK]
Common Mistakes:
Thinking the goal is to merge intervals
Confusing maximum overlap with minimum removal
Sorting intervals without removing any
2. Which of the following C# code snippets correctly sorts intervals by their end time for the minimum removal problem?
easy
A. Array.Sort(intervals, (a, b) => b[1].CompareTo(a[1]));
B. Array.Sort(intervals, (a, b) => a[0].CompareTo(b[0]));
C. Array.Sort(intervals, (a, b) => b[0].CompareTo(a[0]));
D. Array.Sort(intervals, (a, b) => a[1].CompareTo(b[1]));
Solution
Step 1: Identify sorting criteria for minimum removal
We sort intervals by their end time ascending to greedily keep intervals that finish earliest.
Step 2: Match code to sorting by end time ascending
Array.Sort(intervals, (a, b) => a[1].CompareTo(b[1])); uses a[1].CompareTo(b[1]) which sorts by end time ascending correctly.
Final Answer:
Array.Sort(intervals, (a, b) => a[1].CompareTo(b[1])); -> Option D
Quick Check:
Sort by end time ascending = Array.Sort(intervals, (a, b) => a[1].CompareTo(b[1])); [OK]
Hint: Sort intervals by end time ascending for greedy approach [OK]
Common Mistakes:
Sorting by start time instead of end time
Sorting in descending order by mistake
Using wrong array indices for comparison
3. What is the output of the following C# code snippet?
int[][] intervals = new int[][] {
new int[] {1, 3},
new int[] {2, 4},
new int[] {3, 5}
};
Array.Sort(intervals, (a, b) => a[1].CompareTo(b[1]));
int count = 0;
int end = intervals[0][1];
for (int i = 1; i < intervals.Length; i++) {
if (intervals[i][0] < end) {
count++;
} else {
end = intervals[i][1];
}
}
Console.WriteLine(count);
medium
A. 1
B. 2
C. 0
D. 3
Solution
Step 1: Sort intervals by end time
Sorted intervals by end: [1,3], [2,4], [3,5]
Step 2: Count overlaps by comparing start with current end
Hint: Count intervals starting before current end to find removals [OK]
Common Mistakes:
Not updating end when no overlap
Counting intervals that do not overlap
Sorting incorrectly before loop
4. Identify the bug in the following C# code for minimum interval removal:
int[][] intervals = new int[][] {
new int[] {1, 2},
new int[] {1, 3},
new int[] {2, 4}
};
Array.Sort(intervals, (a, b) => a[0].CompareTo(b[0]));
int count = 0;
int end = intervals[0][1];
for (int i = 1; i < intervals.Length; i++) {
if (intervals[i][0] < end) {
count++;
} else {
end = intervals[i][1];
}
}
Console.WriteLine(count);
medium
A. Sorting by start time instead of end time causes incorrect removal count
B. Not initializing count to 1 causes wrong output
C. Loop should start from i = 0 instead of i = 1
D. Using intervals[i][0] instead of intervals[i][1] in comparison
Solution
Step 1: Check sorting criteria
The code sorts intervals by start time, but greedy approach requires sorting by end time.
Step 2: Understand impact on counting removals
Sorting by start time can cause wrong overlaps detection and incorrect count.
Final Answer:
Sorting by start time instead of end time causes incorrect removal count -> Option A
Quick Check:
Sort by end time needed, not start time [OK]
Hint: Always sort by end time ascending for correct greedy removal [OK]
Common Mistakes:
Sorting by start time instead of end time
Starting loop at wrong index
Confusing interval start and end in comparisons
5. Given intervals [[1,2],[2,3],[3,4],[1,3]], what is the minimum number of intervals to remove to make the rest non-overlapping?
hard
A. 0
B. 2
C. 1
D. 3
Solution
Step 1: Sort intervals by end time ascending
Sorted intervals: [1,2], [1,3], [2,3], [3,4]
Step 2: Count overlaps and removals
Start with end=2 (from [1,2])
- [1,3]: start=1 < end=2 overlap, count=1
- [2,3]: start=2 <= end=2 no overlap, update end=3
- [3,4]: start=3 <= end=3 no overlap, update end=4
Total removals = 1
Step 3: Re-check for minimal removals
Check if removing [1,3] is enough. Yes, only 1 removal needed.
Final Answer:
1 -> Option C
Quick Check:
Remove overlapping [1,3] only = 1 [OK]
Hint: Sort by end time, greedily keep intervals with earliest end [OK]
Common Mistakes:
Counting all overlapping intervals instead of minimal removals
Not sorting intervals before processing
Confusing intervals with same start or end times
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.