网站建设上,传奇游戏开发,网站备案增加域名,湖南大钧工程建设有限公司网站以数组 intervals 表示若干个区间的集合#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间#xff0c;并返回 一个不重叠的区间数组#xff0c;该数组需恰好覆盖输入中的所有区间 。
思路一#xff1a;模拟题意 int comp(const void* a, …以数组 intervals 表示若干个区间的集合其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间并返回 一个不重叠的区间数组该数组需恰好覆盖输入中的所有区间 。
思路一模拟题意 int comp(const void* a, const void* b)
{return *(int*)a - *(int*)b;
}int** merge(int** intervals,int intervalsSize,int* intervalsColSize,int* returnSize,int** returnColumnSizes){int* pStart (int*)malloc(intervalsSize * sizeof(int)); int* pEnd (int*)malloc(intervalsSize * sizeof(int));int row 0;int col 0;*returnSize 0; // 初始化returnSizeint** pRes (int**)malloc(intervalsSize * sizeof(int*));for (row 0; row intervalsSize; row){pRes[row] (int*)malloc(*intervalsColSize * sizeof(int));pStart[row] intervals[row][0];pEnd[row] intervals[row][1];} *returnColumnSizes (int*)malloc(intervalsSize * sizeof(int)); qsort(pStart, intervalsSize, sizeof(int), comp);qsort(pEnd, intervalsSize, sizeof(int), comp);for (row 0; row intervalsSize; row){pRes[*returnSize][0] pStart[row]; for ( ; row intervalsSize - 2; row){if (pStart[row 1] pEnd[row]){break;}}pRes[*returnSize][1] pEnd[row];(*returnColumnSizes)[*returnSize] 2;(*returnSize);}return pRes;
}
时间复杂度O(n^2)空间复杂度O(n^2)
分析
本题要将重叠的数组合并可以将二维数组内起始数和结尾数分别放置在两个数组中利用快速排序排列好再通过判断对应位置的起始数是否大于结尾数将可重叠的数放置在新的二维数组中返回即可。
总结
本题难点主要在二维数组的处理上将*returnColumnSizes处理好便可解决此题。