• 【C语言刷LeetCode】56. 合并区间(M)


    以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

    示例 1:

    输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
    输出:[[1,6],[8,10],[15,18]]
    解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
    示例 2:

    输入:intervals = [[1,4],[4,5]]
    输出:[[1,5]]
    解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
     

    提示:

    1 <= intervals.length <= 104
    intervals[i].length == 2
    0 <= starti <= endi <= 104

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/merge-intervals
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    见到数组先排序,这次是二维排序。

    然后双指针:

    1. int Comp(const void **a, const void **b) {
    2. int *one = *(int **)a;
    3. int *two = *(int **)b;
    4. if (one[0] == two[0]) {
    5. return one[1] - two[1];
    6. } else {
    7. return one[0] - two[0];
    8. }
    9. }
    10. int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes){
    11. int i;
    12. int left = 0;
    13. int right = 0;
    14. int **retarr;
    15. int idx = 0;
    16. retarr = (int **)malloc(sizeof(int *) * intervalsSize);
    17. for ( i = 0; i < intervalsSize; i++) {
    18. retarr[i] = (int *)malloc(sizeof(int) *2);
    19. memset(retarr[i], 0, sizeof(int) *2);
    20. }
    21. returnColumnSizes[0] = (int *)malloc(sizeof(int) * intervalsSize);
    22. for (i = 0; i < intervalsSize; i++) {
    23. returnColumnSizes[0][i] = 2;
    24. }
    25. qsort(intervals, intervalsSize, sizeof(intervals[0]), Comp);
    26. left = intervals[0][0];
    27. right = intervals[0][1];
    28. for (i = 1; i < intervalsSize; i++){
    29. if ((intervals[i][0] >= left) && (intervals[i][0] <= right) && (intervals[i][1] > right)) {
    30. right = intervals[i][1];
    31. } else if (intervals[i][0] > right) {
    32. retarr[idx][0] = left;
    33. retarr[idx][1] = right;
    34. left = intervals[i][0];
    35. right = intervals[i][1];
    36. idx++;
    37. }
    38. }
    39. retarr[idx][0] = left;
    40. retarr[idx][1] = right;
    41. idx++;
    42. *returnSize = idx;
    43. return retarr;
    44. }

  • 相关阅读:
    【最详细】最新最全Java虚拟机(JVM)面试题(51道)
    Java项目实战《苍穹外卖》 二、项目搭建
    快速认识 WebAssembly
    算法-二叉树前中后层遍历
    nest笔记九:参数校验使用延伸
    智能指针笔记
    用Python语言进行多元时间序列ARIMAX模型分析
    SpringBoot是如何做到自动装配的
    Linux——生产者消费者模型
    5.1SpringBoot整合Kafka(工具安装Kafka+Tools)
  • 原文地址:https://blog.csdn.net/jin615567975/article/details/125550867