Untitled
unknown
plain_text
3 years ago
1.2 kB
11
Indexable
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;
}
Editor is loading...