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);
}
}