Activity Selection Problem

You are given n activities with their start and finish times. Select the maximum number of activities that can be performed by a single person, assuming that a person can only work on a single activity at a time.

Examples:

Example 1 : Consider the following 3 activities sorted by
by finish time.
     start[]  =  {10, 12, 20};
     finish[] =  {20, 25, 30};
A person can perform at most two activities. The 
maximum set of activities that can be executed is {0, 2} 
[ These are indexes in start[] and finish[] ]

Example 2 : Consider the following 6 activities sorted by by finish time.
     start[]  =  {1, 3, 0, 5, 8, 5};
     finish[] =  {2, 4, 6, 7, 9, 9};
A person can perform at most four activities. The maximum set of activities 
that can be executed is {0, 1, 3, 4} [ These are indexes in start[] and finish[] ]
class pair {
    long start;
    long end;
}

class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        pair[] arr = new pair[n];
        for (int i = 0; i < n; i++) {
            pair p = new pair();
            p.start = s.nextInt();
            p.end = s.nextInt();
            arr[i] = p;
        }
        Arrays.sort(arr, (a, b) -> (int) (a.end - b.end));
        int ans = 0;
        long end_time = 0;
        for (int j = 0; j < n; j++) {
            if (j == 0) {// Selecting the first choice
                ans++;
                end_time = arr[j].end;
            } else {
                if (end_time <= arr[j].start) {
                    ans++;
                    end_time = arr[j].end;
                }
            }
        }
        System.out.println(ans);
    }
}

Last updated