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.