合並數組
阿新 • • 發佈:2018-07-21
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; }
合並數組