Bird
Raised Fist0
DSA Typescriptprogramming~5 mins

Activity Selection Problem in DSA Typescript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main goal of the Activity Selection Problem?
To select the maximum number of activities that don't overlap in time from a given set of activities.
Click to reveal answer
beginner
Which algorithmic approach is commonly used to solve the Activity Selection Problem?
A greedy algorithm that selects the next activity with the earliest finishing time that doesn't conflict with already selected activities.
Click to reveal answer
intermediate
Why do we sort activities by their finishing times in the Activity Selection Problem?
Sorting by finishing times helps to always pick the activity that leaves the most room for others, maximizing the total number of activities selected.
Click to reveal answer
beginner
In the Activity Selection Problem, what condition must be true for an activity to be selected after another?
The start time of the new activity must be greater than or equal to the finish time of the last selected activity.
Click to reveal answer
intermediate
What is the time complexity of the Activity Selection Problem solution using a greedy approach?
O(n log n) due to sorting the activities by their finish times. The selection process itself is O(n).
Click to reveal answer
What is the first step in solving the Activity Selection Problem?
ASort activities by their durations
BSort activities by their starting times
CSelect activities randomly
DSort activities by their finishing times
Which of these best describes the greedy choice in the Activity Selection Problem?
APick the activity with the earliest start time
BPick the activity with the shortest duration
CPick the activity with the earliest finish time that doesn't overlap
DPick the activity with the latest finish time
If two activities overlap, what does the Activity Selection Problem algorithm do?
ASelect the one with the earlier finish time
BSelect the one with the later start time
CSelect both activities
DSkip both activities
What data structure is primarily used to store the selected activities in the Activity Selection Problem?
AList or array
BQueue
CStack
DTree
What is the main reason the greedy algorithm works for the Activity Selection Problem?
ABecause activities are sorted by start time
BBecause the problem has optimal substructure and greedy choice property
CBecause it tries all possible combinations
DBecause it uses dynamic programming
Explain how the greedy algorithm solves the Activity Selection Problem step-by-step.
Think about sorting and then picking activities that don't overlap.
You got /5 concepts.
    Why does sorting activities by their finishing times lead to an optimal solution in the Activity Selection Problem?
    Consider how choosing the earliest finishing activity affects the rest.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main goal of the Activity Selection Problem?
      easy
      A. Select the maximum number of activities that don't overlap in time
      B. Find the activity with the longest duration
      C. Sort activities by their start times
      D. Calculate the total time of all activities

      Solution

      1. Step 1: Understand the problem goal

        The Activity Selection Problem aims to choose activities that do not overlap and maximize the count.
      2. Step 2: Identify the correct objective

        Among the options, only selecting the maximum number of non-overlapping activities matches the problem's goal.
      3. Final Answer:

        Select the maximum number of activities that don't overlap in time -> Option A
      4. Quick Check:

        Goal = Max non-overlapping activities [OK]
      Hint: Focus on maximizing count without time conflicts [OK]
      Common Mistakes:
      • Confusing longest duration with maximum count
      • Sorting by start time only
      • Summing all activity durations
      2. Which of the following TypeScript code snippets correctly sorts activities by their finish time for the Activity Selection Problem?
      easy
      A. activities.sort((a, b) => a.finish - b.finish);
      B. activities.sort((a, b) => a.start - b.start);
      C. activities.sort((a, b) => b.finish - a.finish);
      D. activities.sort((a, b) => b.start - a.start);

      Solution

      1. Step 1: Identify sorting criteria for Activity Selection

        Activities must be sorted by their finish times in ascending order to apply the greedy approach.
      2. Step 2: Match sorting code to criteria

        activities.sort((a, b) => a.finish - b.finish); sorts activities by finish time ascending, which is correct for the problem.
      3. Final Answer:

        activities.sort((a, b) => a.finish - b.finish); -> Option A
      4. Quick Check:

        Sort by finish time ascending [OK]
      Hint: Sort activities by finish time ascending [OK]
      Common Mistakes:
      • Sorting by start time instead of finish time
      • Sorting finish time descending
      • Using incorrect comparison operators
      3. What is the output of the following TypeScript code for the Activity Selection Problem?
      const activities = [
        {start: 1, finish: 4},
        {start: 3, finish: 5},
        {start: 0, finish: 6},
        {start: 5, finish: 7},
        {start: 8, finish: 9},
        {start: 5, finish: 9}
      ];
      
      activities.sort((a, b) => a.finish - b.finish);
      
      const selected = [];
      let lastFinish = 0;
      for (const activity of activities) {
        if (activity.start >= lastFinish) {
          selected.push(activity);
          lastFinish = activity.finish;
        }
      }
      
      console.log(selected);
      medium
      A. [{start:0, finish:6}, {start:8, finish:9}]
      B. [{start:1, finish:4}, {start:3, finish:5}, {start:5, finish:7}]
      C. [{start:1, finish:4}, {start:5, finish:7}, {start:8, finish:9}]
      D. [{start:3, finish:5}, {start:5, finish:9}]

      Solution

      1. Step 1: Sort activities by finish time

        Sorted list: [{1,4}, {3,5}, {0,6}, {5,7}, {8,9}, {5,9}]
      2. Step 2: Select activities greedily

        Select {1,4} (start 1 >= 0), then {5,7} (start 5 >= 4), then {8,9} (start 8 >= 7). Others overlap.
      3. Final Answer:

        [{start:1, finish:4}, {start:5, finish:7}, {start:8, finish:9}] -> Option C
      4. Quick Check:

        Greedy selection = chosen activities [OK]
      Hint: Pick earliest finishing activities first [OK]
      Common Mistakes:
      • Selecting overlapping activities
      • Not sorting by finish time
      • Updating lastFinish incorrectly
      4. Identify the bug in this TypeScript code for the Activity Selection Problem:
      const activities = [
        {start: 1, finish: 3},
        {start: 2, finish: 5},
        {start: 4, finish: 7}
      ];
      
      activities.sort((a, b) => a.start - b.start);
      
      const selected = [];
      let lastFinish = 0;
      for (const activity of activities) {
        if (activity.start >= lastFinish) {
          selected.push(activity);
          lastFinish = activity.finish;
        }
      }
      
      console.log(selected);
      medium
      A. Not initializing selected array
      B. Sorting by start time instead of finish time
      C. Using 'let' instead of 'const' for lastFinish
      D. Incorrect comparison operator in if condition

      Solution

      1. Step 1: Check sorting criteria

        The code sorts activities by start time, but the greedy algorithm requires sorting by finish time.
      2. Step 2: Identify impact of sorting error

        Sorting by start time can cause incorrect selection of overlapping activities, breaking the algorithm.
      3. Final Answer:

        Sorting by start time instead of finish time -> Option B
      4. Quick Check:

        Sort by finish time needed [OK]
      Hint: Always sort by finish time for this problem [OK]
      Common Mistakes:
      • Sorting by start time
      • Confusing variable declarations
      • Wrong if condition operators
      5. Given the activities with start and finish times:
      const activities = [
        {start: 0, finish: 3},
        {start: 1, finish: 4},
        {start: 3, finish: 5},
        {start: 4, finish: 7},
        {start: 5, finish: 9},
        {start: 8, finish: 10}
      ];

      How many activities can be selected using the Activity Selection Problem's greedy approach, and which are they?
      hard
      A. 4 activities: {0,3}, {3,5}, {5,9}, {8,10}
      B. 4 activities: {0,3}, {3,5}, {4,7}, {8,10}
      C. 5 activities: {0,3}, {1,4}, {3,5}, {4,7}, {8,10}
      D. 3 activities: {0,3}, {3,5}, {5,9}

      Solution

      1. Step 1: Sort activities by finish time

        Sorted: [{0,3}, {1,4}, {3,5}, {4,7}, {5,9}, {8,10}]
      2. Step 2: Select greedily

        {0,3} (last=3); skip {1,4}; {3,5} (last=5); {4,7} overlaps with {3,5} so skip; {5,9} (last=9); {8,10} overlaps with {5,9} so skip. Actually, {8,10} starts before 9, so overlaps. So selected are {0,3}, {3,5}, {5,9} only 3 activities.
      3. Final Answer:

        3 activities: {0,3}, {3,5}, {5,9} -> Option D
      4. Quick Check:

        Greedy picks non-overlapping max activities [OK]
      Hint: Sort by finish time, pick next starting after last finish [OK]
      Common Mistakes:
      • Selecting overlapping activities
      • Miscounting due to off-by-one errors
      • Ignoring sorting step
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard