LeetCode·56.合并区间·贪心

链接:https://leetcode.cn/problems/merge-intervals/solution/-by-xun-ge-v-ab8b/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 

题目LeetCode·56.合并区间·贪心_第1张图片

 

示例LeetCode·56.合并区间·贪心_第2张图片

 

思路

解题思路
按照左边界排序,排序之后局部最优:每次合并都取最大的右边界,这样就可以合并更多的区间了,整体最优:合并所有重叠的区间。

局部最优可以推出全局最优,找不出反例,试试贪心。

那有同学问了,本来不就应该合并最大右边界么,这和贪心有啥关系?

有时候贪心就是常识!哈哈

按照左边界从小到大排序之后,如果 intervals[i][0] < intervals[i - 1][1] 即intervals[i]左边界 < intervals[i - 1]右边界,则一定有重复,因为intervals[i]的左边界一定是大于等于intervals[i - 1]的左边界。

即:intervals[i]的左边界在intervals[i - 1]左边界和右边界的范围内,那么一定有重复!

代码


/**
 * 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 cmp(const void* a, const void* b){//排序
    int* _a = *(int**)a;
    int* _b = *(int**)b;
    return _a[0] == _b[0] ? _a[1] - _b[1] : _a[0] - _b[0];
}

int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes){
    *returnSize = 0;
    if(intervalsSize == 0)
        return ;

    //排序
    qsort(intervals, intervalsSize, sizeof(int*), cmp);

    *returnColumnSizes = malloc(sizeof(int*) * intervalsSize);
    int left = intervals[0][0];
    int right = intervals[0][1];
    for(int i=1; i intervals[i][1] ? right : intervals[i][1];
        }
        else
        {
            (*returnColumnSizes)[(*returnSize)] = 2;
            intervals[(*returnSize)][0] = left;//就在原来数组上修改即可
            intervals[(*returnSize)][1] = right;//因为最简区间肯定 <= 原来区间个数
            (*returnSize)++;
            left = intervals[i][0];
            right = intervals[i][1];
        }
    }

    (*returnColumnSizes)[(*returnSize)] = 2;//保存最后一个区间
    intervals[(*returnSize)][0] = left;
    intervals[(*returnSize)][1] = right;
    (*returnSize)++;

    return intervals;
}


作者:xun-ge-v
链接:https://leetcode.cn/problems/merge-intervals/solution/-by-xun-ge-v-ab8b/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(LeetCode刷题笔记,leetcode,算法,贪心算法)