// Java implementation of the above approach import java.util.*; class GFG { // Function to return the minimum // number of halls required static int minHalls(int lectures[][], int n) { // Initialize a vector of pair, Time, first value // indicates the time of entry or exit of a lecture // second value denotes whether the lecture starts // or ends ArrayList Time = new ArrayList<>(); // Store the lecture times for (int i = 0; i < n; i++) { Time.add(new pair(lectures[i][0], 1)); Time.add(new pair(lectures[i][1], -1)); } // Sort the vector Collections.sort(Time, (pair A, pair B) -> { return A.first - B.first; }); int answer = 0, sum = 0; // Traverse the Time vector and Update sum and // answer variables for (int i = 0; i < Time.size(); i++) { sum += Time.get(i).second; answer = Math.max(answer, sum); } // Return the answer return answer; } static class pair { int first, second; pair(int x, int y) { first = x; second = y; } } // Driver Code public static void main(String[] args) { int lectures[][] = { { 0, 5 }, { 1, 2 }, { 1, 10 } }; int n = lectures.length; System.out.println(minHalls(lectures, n)); } }