#include <stdio.h>
#include <stdlib.h>
typedef struct {
int start;
int end;
} Interval;
int compare(const void *a, const void *b) {
Interval *i1 = (Interval *)a;
Interval *i2 = (Interval *)b;
return i1->start - i2->start;
}
void mergeIntervals(Interval intervals[], int n) {
if (n <= 0) return;
qsort(intervals, n, sizeof(Interval), compare); // sort by start time
int index = 0; // index of last merged interval
for (int i = 1; i < n; i++) {
if (intervals[index].end >= intervals[i].start) {
// Overlapping intervals, merge
if (intervals[index].end < intervals[i].end) {
intervals[index].end = intervals[i].end; // extend end
}
} else {
index++;
intervals[index] = intervals[i]; // move non-overlapping interval
}
}
// Print merged intervals
for (int i = 0; i <= index; i++) {
printf("[%d,%d]", intervals[i].start, intervals[i].end);
if (i < index) printf(", ");
}
printf("\n");
}
int main() {
Interval intervals[] = {{1,3}, {2,6}, {8,10}, {15,18}};
int n = sizeof(intervals) / sizeof(intervals[0]);
mergeIntervals(intervals, n);
return 0;
}qsort(intervals, n, sizeof(Interval), compare); // sort by start time
sort intervals to process them in order of start time
if (intervals[index].end >= intervals[i].start) {
check if current interval overlaps with last merged interval
intervals[index].end = intervals[i].end;
extend the end of merged interval if needed
index++; intervals[index] = intervals[i];
move to next merged interval when no overlap