Untitled

mail@pastecode.io avatar
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;
}