您的位置:首页 > 编程语言 > C语言/C++

LeetCode-56-Merge Intervals(C语言实现)

2018-01-03 07:15 471 查看
/**

 * 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(const void *a, const void *b){

    return ((struct Interval*)a) -> start - ((struct Interval*)b) -> start;

}

struct Interval* merge(struct Interval* intervals, int intervalsSize, int* returnSize) {

    qsort(intervals, intervalsSize, sizeof(struct Interval), cmp);

    

    *returnSize = intervalsSize;

    struct Interval* res = (struct Interval*)malloc(sizeof(struct Interval) * intervalsSize);

    

    if(intervalsSize == 0 || intervalsSize == 1)

        return intervals;

    

    int i, j, t_s, t_e;

    j = 0;

    t_s = intervals[0].start;

    t_e = intervals[0].end;

    

    for(int i = 1; i < intervalsSize; ++i){

        if(t_e >= intervals[i].end){

            --(*returnSize);

        }

        else if(t_e >= intervals[i].start){

            t_e = intervals[i].end;

            --(*returnSize);

        }

        else{

            res[j].start = t_s;

            res[j].end = t_e;

            ++j;

            t_s = intervals[i].start;

            t_e = intervals[i].end;

        }

    }

    res[j].start = t_s;

    res[j].end = t_e;

    

    return res;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: