056 - Merge Intervals
2015-11-27 08:31
344 查看
Given a collection of intervals, merge all overlapping intervals.
For example,
Given
return
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;
}
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;
}
相关文章推荐
- 第七周项目4-队列数组
- linux解压多个文件
- 在程序员的眼里,用户是这样使用他们开发的软件的
- linux解压多个文件
- Protocol and Delegate协议和代理
- 第13周 项目5-拓扑排序算法验证
- 第十二周项目2操作用邻接表存储的图
- 第12周项目2 操作用邻接表存储
- 第十一周 项目1-1 二叉树的层次遍历算法
- iOS学习之分段Table View的使用(Grouped样式表格)
- Kruskal算法的验证
- 第10周项目3 利用二叉树遍历思想解决问题
- iOS中 Swift初级入门学习(二)
- 第13周项目1-Prim算法的验证
- 第13周 项目4-Floyd算法验证
- HDU 2686 Matrix HDU 3376 Matrix Again 费用流
- 14.4 GDI 位图对象 (II)
- iOS中 Swift初级入门学习(二)
- NSArray与NSMutableArray 数组与可变数组
- iOS学习之Table View的简单使用