首页 > 编程语言 > 详细

合并数组

时间:2018-07-21 19:38:22      阅读:24      评论:0      收藏:0      [点我收藏+]

标签:turn   fin   ray   qsort   caller   turned   输入   int   返回   

给出一个区间的集合,请合并所有重叠的区间。

示例 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;
}

 

合并数组

标签:turn   fin   ray   qsort   caller   turned   输入   int   返回   

原文:https://www.cnblogs.com/onlyandonly/p/9347658.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号