What if a simple rule could help you attend the most meetings without stress?
Why Activity Selection Problem in DSA C++?
Imagine you have a list of meetings to attend in a day, but some overlap in time. You want to attend the maximum number of meetings without any clashes.
Trying to pick meetings manually means checking every possible combination to avoid overlaps. This is slow, confusing, and easy to make mistakes, especially when the list is long.
The Activity Selection Problem uses a smart way to pick meetings by always choosing the one that finishes earliest. This simple rule helps you quickly find the maximum number of non-overlapping meetings.
for each meeting: check if it overlaps with chosen meetings if no overlap, add to schedule return schedule
sort meetings by finish time select first meeting for each next meeting: if start time >= last selected finish time: select meeting
This method lets you efficiently plan your day to attend the most meetings possible without conflicts.
Scheduling conference talks to attend the maximum number without missing any due to overlapping times.
Manual selection is slow and error-prone.
Choosing activities by earliest finish time is a simple, effective strategy.
This approach maximizes the number of non-overlapping activities.
Practice
Activity Selection Problem?Solution
Step 1: Understand the problem goal
The Activity Selection Problem aims to choose the largest set of activities that do not overlap in their time intervals.Step 2: Identify the correct goal
Among the options, only selecting the maximum number of non-overlapping activities matches the problem's goal.Final Answer:
Select the maximum number of activities that don't overlap in time -> Option DQuick Check:
Goal = Max non-overlapping activities [OK]
- Confusing longest duration with maximum count
- Sorting by start time only
- Summing all activity durations
std::sort?Solution
Step 1: Identify sorting criteria for Activity Selection
Activities must be sorted by their finish time to apply the greedy approach correctly.Step 2: Match sorting code to finish time
std::sort(activities.begin(), activities.end(), [](auto &a, auto &b){ return a.finish < b.finish; }); sorts activities by their finish time using a lambda comparator, which is the correct syntax.Final Answer:
std::sort(activities.begin(), activities.end(), [](auto &a, auto &b){ return a.finish < b.finish; }); -> Option BQuick Check:
Sort by finish time = std::sort(activities.begin(), activities.end(), [](auto &a, auto &b){ return a.finish < b.finish; }); [OK]
- Sorting by start time instead of finish time
- Using default sort without comparator on custom structs
- Sorting by duration which is not needed
struct Activity {
int start, finish;
};
Activity activities[] = {{1, 3}, {2, 5}, {4, 7}, {6, 9}};
int n = 4;
std::sort(activities, activities + n, [](Activity a, Activity b) { return a.finish < b.finish; });
int count = 1, last_finish = activities[0].finish;
for (int i = 1; i < n; i++) {
if (activities[i].start >= last_finish) {
count++;
last_finish = activities[i].finish;
}
}
std::cout << count;
Solution
Step 1: Sort activities by finish time
Sorted activities by finish time: (1,3), (2,5), (4,7), (6,9)Step 2: Select activities greedily
Start with first activity (1,3). Next, (2,5) starts at 2 < 3, skip. (4,7) starts at 4 >= 3, select, last_finish=7. (6,9) starts at 6 < 7, skip. Total selected = 3.Final Answer:
3 -> Option AQuick Check:
Max non-overlapping activities = 3 [OK]
- Counting overlapping activities
- Not updating last_finish correctly
- Assuming all activities can be selected
struct Activity {
int start, finish;
};
Activity activities[] = {{1, 2}, {3, 4}, {0, 6}, {5, 7}};
int n = 4;
std::sort(activities, activities + n, [](Activity a, Activity b) { return a.start < b.start; });
int count = 1, last_finish = activities[0].finish;
for (int i = 1; i < n; i++) {
if (activities[i].start >= last_finish) {
count++;
last_finish = activities[i].finish;
}
}
std::cout << count;
Solution
Step 1: Check sorting criteria
The code sorts activities by start time, but the greedy approach requires sorting by finish time.Step 2: Understand impact of wrong sorting
Sorting by start time can cause incorrect selection of activities, leading to wrong count.Final Answer:
Sorting by start time instead of finish time -> Option CQuick Check:
Sort by finish time needed, not start time [OK]
- Sorting by start time
- Incorrect initialization of count
- Wrong loop boundaries
activities = [(1, 4), (3, 5), (0, 6), (5, 7), (8, 9), (5, 9)]
Using the Activity Selection Problem approach, which set of activities represents the maximum number of non-overlapping activities?
Solution
Step 1: Sort activities by finish time
Sorted by finish time: (1,4), (3,5), (0,6), (5,7), (8,9), (5,9)Step 2: Select activities greedily
Select (1,4). Next, (3,5) overlaps with (1,4), skip. (0,6) overlaps, skip. (5,7) starts after 4, select. (8,9) starts after 7, select. (5,9) overlaps with (5,7), skip.Final Answer:
[(1, 4), (5, 7), (8, 9)] -> Option AQuick Check:
Max non-overlapping set = [(1, 4), (5, 7), (8, 9)] [OK]
- Choosing overlapping activities
- Not sorting before selection
- Selecting activities with later finish times first
Ready to prove it?
Pass the test and this pattern moves unknown
