Bird
Raised Fist0
DSA Typescriptprogramming~10 mins

Activity Selection Problem in DSA Typescript - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to sort activities by their finish time.

DSA Typescript
activities.sort((a, b) => a.[1] - b.finish);
Drag options to blanks, or click blank then click option'
Aduration
Bfinish
Cstart
Dindex
Attempts:
3 left
💡 Hint
Common Mistakes
Sorting by start time instead of finish time.
Using a wrong property name.
2fill in blank
medium

Complete the code to select the first activity after sorting.

DSA Typescript
selected.push(activities[[1]]);
Drag options to blanks, or click blank then click option'
Aactivities.length - 1
B1
Cactivities.length
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Starting selection from index 1 instead of 0.
Using the last index instead of the first.
3fill in blank
hard

Fix the error in the condition to check if the next activity can be selected.

DSA Typescript
if (activities[i].start >= [1]) {
Drag options to blanks, or click blank then click option'
Aactivities[i-1].finish
Bselected[selected.length]
Cselected[selected.length - 1].finish
Dactivities[0].start
Attempts:
3 left
💡 Hint
Common Mistakes
Comparing with the wrong activity's finish time.
Using an out-of-range index.
4fill in blank
hard

Fill both blanks to complete the loop that selects compatible activities.

DSA Typescript
for (let i = [1]; i < activities.length; i++) {
  if (activities[i].start >= [2]) {
    selected.push(activities[i]);
  }
}
Drag options to blanks, or click blank then click option'
A1
B0
Cselected[selected.length - 1].finish
Dactivities[0].start
Attempts:
3 left
💡 Hint
Common Mistakes
Starting loop from 0 causing duplicate selection.
Comparing with wrong finish time.
5fill in blank
hard

Fill all three blanks to create a function that returns the maximum set of compatible activities.

DSA Typescript
function selectActivities(activities: {start: number, finish: number}[]): {start: number, finish: number}[] {
  activities.sort((a, b) => a.[1] - b.[2]);
  const selected = [activities[0]];
  for (let i = [3]; i < activities.length; i++) {
    if (activities[i].start >= selected[selected.length - 1].finish) {
      selected.push(activities[i]);
    }
  }
  return selected;
}
Drag options to blanks, or click blank then click option'
Afinish
Bstart
C1
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Sorting by start time instead of finish time.
Starting loop from 0 causing duplicate selection.

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