您的位置:首页 > 其它

056 - Merge Intervals

2015-11-27 08:31 344 查看
Given a collection of intervals, merge all overlapping intervals.

For example,

Given
[1,3],[2,6],[8,10],[15,18]
,

return
[1,6],[8,10],[15,18]
.

int intercmp(const void *a, const void *b)
{
struct Interval *x = (struct Interval *)a;
struct Interval *y = (struct Interval *)b;
if (x->start < y->start) return -1;
if (x->start > y->start) return 1;
if (x->end < y->end) return -1;
if (x->end > y->end) return 1;
return 0;
}
struct Interval* merge(struct Interval* intervals, int intervalsSize, int* returnSize)
{
*returnSize = 0;
if (!intervalsSize) return NULL;
qsort(intervals, intervalsSize, sizeof(struct Interval), intercmp);
int i;
for (i = 1; i < intervalsSize; i++) {
if (intervals[i].start <= intervals[*returnSize].end)
intervals[*returnSize].end = intervals[i].end > intervals[*returnSize].end?intervals[i].end:intervals[*returnSize].end;
else {
(*returnSize)++;
intervals[*returnSize].start = intervals[i].start;
intervals[*returnSize].end = intervals[i].end;
}
}
(*returnSize)++;
struct Interval *ret = (struct Interval *)malloc(sizeof(struct Interval) * (*returnSize));
memcpy(ret, intervals, sizeof(struct Interval) * (*returnSize));
return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: