Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources
Activity Selection

Activity Selection

Problem Statement

Given start and finish times of activities, select the maximum number of non-overlapping activities. This easy-level greedy problem is about scheduling—fit in as many tasks as possible!

Example

Input: start = [1, 3, 0, 5], finish = [4, 5, 6, 7]

Output: 3 ([1,4], [5,7], [0,6])

Input: start = [1, 2], finish = [2, 3]

Output: 2

Code

Java
Python
JavaScript
public class Solution {
    public int activitySelection(int[] start, int[] finish) {
        int[][] activities = new int[start.length][2];
        for (int i = 0; i < start.length; i++) {
            activities[i][0] = start[i];
            activities[i][1] = finish[i];
        }
        Arrays.sort(activities, (a, b) -> Integer.compare(a[1], b[1]));
        int count = 1;
        int lastEnd = activities[0][1];
        for (int i = 1; i < activities.length; i++) {
            if (activities[i][0] >= lastEnd) {
                count++;
                lastEnd = activities[i][1];
            }
        }
        return count;
    }
}
            
def activity_selection(start, finish):
    activities = sorted(zip(start, finish), key=lambda x: x[1])
    count = 1
    last_end = activities[0][1]
    for i in range(1, len(activities)):
        if activities[i][0] >= last_end:
            count += 1
            last_end = activities[i][1]
    return count
            
function activitySelection(start, finish) {
    let activities = start.map((s, i) => [s, finish[i]]);
    activities.sort((a, b) => a[1] - b[1]);
    let count = 1;
    let lastEnd = activities[0][1];
    for (let i = 1; i < activities.length; i++) {
        if (activities[i][0] >= lastEnd) {
            count++;
            lastEnd = activities[i][1];
        }
    }
    return count;
}
            

Explanation

  • Greedy Choice: Sort by finish time, select earliest-ending activity.
  • Flow: Pick next activity if it starts after the last end.
  • Example: [1,4],[3,5],[0,6],[5,7] → [1,4],[5,7].

Note

Time complexity: O(n log n), Space complexity: O(n). Maximize your schedule!