合并数组
Posted onlyandonly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并数组相关的知识,希望对你有一定的参考价值。
给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
将数组按照start进行排序,先把第一个区间扔进返回数组,然后遍历剩下的区间,如果该区间和返回数组尾部的区间重叠,就把它们合并,不然就把该区间扔进返回数组。
/** * 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(struct Interval *a,struct Interval *b) { return a->start-b->start; } struct Interval* merge(struct Interval* intervals, int intervalsSize, int* returnSize) { if(intervalsSize<1) return NULL; qsort(intervals,intervalsSize,sizeof(struct Interval),cmp); int i; int size=0; struct Interval *a=(struct Interval *)malloc(sizeof(struct Interval)); a[size].start=intervals[0].start; a[size++].end=intervals[0].end; for(i=1;i<intervalsSize;i++) { if(intervals[i].start>a[size-1].end) { a=(struct Interval *)realloc(a,sizeof(struct Interval)*(size+1)); a[size].start=intervals[i].start; a[size++].end=intervals[i].end; } else { a[size-1].end=intervals[i].end>a[size-1].end?intervals[i].end:a[size-1].end; } } *returnSize=size; return a; }
以上是关于合并数组的主要内容,如果未能解决你的问题,请参考以下文章