Untitled
unknown
plain_text
a year ago
1.2 kB
2
Indexable
Never
int cmpfunc (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } int max(int n, int m) { return n > m ? n : m; } /** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned as *returnColumnSizes array. * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free(). */ int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes) { if (!intervals || !intervalsSize) { *returnSize = 0; return NULL; } qsort(intervals, intervalsSize, sizeof(int*), cmpfunc); /*using quick sort, qsort(array_name,array_end,size of variables, cmpfunc) the cmpfunc is constant*/ int curr = 0; for (int i = 0; i < intervalsSize; i++) { if (intervals[curr][intervalsSize-1] >= intervals[i][0]) { intervals[curr][intervalsSize-1] = max(intervals[curr][intervalsSize-1], intervals[i][intervalsSize-1]); } else { curr++; intervals[curr] = intervals[i]; } } *returnSize = curr + 1; return intervals; }