/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* };
*/
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int cmp(const void *a, const void *b){
return ((struct Interval*)a) -> start - ((struct Interval*)b) -> start;
}
struct Interval* merge(struct Interval* intervals, int intervalsSize, int* returnSize) {
qsort(intervals, intervalsSize, sizeof(struct Interval), cmp);
*returnSize = intervalsSize;
struct Interval* res = (struct Interval*)malloc(sizeof(struct Interval) * intervalsSize);
if(intervalsSize == 0 || intervalsSize == 1)
return intervals;
int i, j, t_s, t_e;
j = 0;
t_s = intervals[0].start;
t_e = intervals[0].end;
for(int i = 1; i < intervalsSize; ++i){
if(t_e >= intervals[i].end){
--(*returnSize);
}
else if(t_e >= intervals[i].start){
t_e = intervals[i].end;
--(*returnSize);
}
else{
res[j].start = t_s;
res[j].end = t_e;
++j;
t_s = intervals[i].start;
t_e = intervals[i].end;
}
}
res[j].start = t_s;
res[j].end = t_e;
return res;
}
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* };
*/
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int cmp(const void *a, const void *b){
return ((struct Interval*)a) -> start - ((struct Interval*)b) -> start;
}
struct Interval* merge(struct Interval* intervals, int intervalsSize, int* returnSize) {
qsort(intervals, intervalsSize, sizeof(struct Interval), cmp);
*returnSize = intervalsSize;
struct Interval* res = (struct Interval*)malloc(sizeof(struct Interval) * intervalsSize);
if(intervalsSize == 0 || intervalsSize == 1)
return intervals;
int i, j, t_s, t_e;
j = 0;
t_s = intervals[0].start;
t_e = intervals[0].end;
for(int i = 1; i < intervalsSize; ++i){
if(t_e >= intervals[i].end){
--(*returnSize);
}
else if(t_e >= intervals[i].start){
t_e = intervals[i].end;
--(*returnSize);
}
else{
res[j].start = t_s;
res[j].end = t_e;
++j;
t_s = intervals[i].start;
t_e = intervals[i].end;
}
}
res[j].start = t_s;
res[j].end = t_e;
return res;
}