请用C语言写一个区间合并的代码模板
时间: 2023-03-02 07:45:19 浏览: 66
好的,以下是一个简单的用C语言实现区间合并的代码模板:
```c
#include <stdio.h>
// 定义区间结构体
typedef struct interval {
int start;
int end;
} Interval;
// 区间合并函数
Interval* merge_intervals(Interval* intervals, int size, int* returnSize) {
if (size <= 1) {
*returnSize = size;
return intervals;
}
// 将区间按照起点从小到大排序
for (int i = 0; i < size; i++) {
for (int j = i + 1; j < size; j++) {
if (intervals[i].start > intervals[j].start) {
Interval temp = intervals[i];
intervals[i] = intervals[j];
intervals[j] = temp;
}
}
}
// 合并区间
Interval* result = (Interval*)malloc(sizeof(Interval) * size);
int index = 0;
result[0] = intervals[0];
for (int i = 1; i < size; i++) {
if (result[index].end >= intervals[i].start) {
result[index].end = fmax(result[index].end, intervals[i].end);
} else {
index++;
result[index] = intervals[i];
}
}
*returnSize = index + 1;
return result;
}
// 测试
int main() {
Interval intervals[] = {{1, 3}, {2, 6}, {8, 10}, {15, 18}};
int size = sizeof(intervals) / sizeof(intervals[0]);
int returnSize;
Interval* result = merge_intervals(intervals, size, &returnSize);
printf("[");
for (int i = 0; i < returnSize; i++) {
printf("[%d, %d]", result[i].start, result[i].end);
if (i != returnSize - 1) {
printf(", ");
}
}
printf("]\n");
free(result);
return 0;
}
```
这个代码模板的实现思路是:先按照区间起点从小到大排序,然后依次合并相邻的区间,如果相邻两个区间不能合并,则将当前区间加入结果中。最后返回合并后的区间数组。