码迷,mamicode.com
首页 > 编程语言 > 详细

合并数组

时间:2018-07-21 19:51:04      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:class   col   重叠   not   init   art   star   str   null   

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

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

 

合并数组

标签:class   col   重叠   not   init   art   star   str   null   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!