Merge intervals
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List result = new ArrayList<>();
result.add(intervals[0]);
for (int i = 1; i < intervals.length; i++) {
int[] last = result.get(result.size() - 1);
if (intervals[i][0] <= last[1])
last[1] = max(last[1], intervals[i][1]);
else result.add(intervals[i]);
} Advertisement
Meeting rooms count
int[] starts = intervals.map(i -> i[0]).sorted();
int[] ends = intervals.map(i -> i[1]).sorted();
int rooms = 0, endIdx = 0;
for (int start : starts) {
if (start < ends[endIdx]) rooms++;
else endIdx++;
}
return rooms;Advertisement
Priority queue variant
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
PriorityQueue pq = new PriorityQueue<>();
for (int[] iv : intervals) {
if (!pq.isEmpty() && pq.peek() <= iv[0]) pq.poll();
pq.offer(iv[1]);
}
return pq.size(); Insertion into sorted intervals
Binary search for position. Merge overlapping neighbors.