• 56.合并区间(面试遇到的一道算法题,简述解法)


    题目:

    以数组 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

    个人思路:

    1、进行排序

    2、从左到右,判断区间右坐标和左坐标大小进行合并

    3、输出区间

    C#答案:

    public int[][] Merge(int[][] intervals)
    {
    if (intervals.Length == 0)
    {
    return intervals;
    }

    /*基于每个区间左边界完成数组排序,保证区间左边界越小的越靠近左边。*/
    intervals = intervals.OrderBy(p => p[0]).ToArray();

    /*遍历数组,比较相邻区间是否能合并。如果左区间的右边界不小于右区间的左边界,则左右区间可以合并。*/
    List<int[]> list = new List<int[]>();
    for (int i = 0; i < intervals.Length - 1; i++)
    {
    /*
    左区间的右边界不小于右区间的左边界,则区间可以合并。将右区间作为合并后结果,
    则更新右区间的左边界为左区间的左边界。
    */
    if (intervals[i][1] >= intervals[i + 1][0])
    {
    intervals[i + 1][0] = intervals[i][0];

    /*左区间的右边界不小于右区间的右边界,则右区间的右边界更新为左区间的右边界。*/
    if (intervals[i][1] >= intervals[i + 1][1])
    {
    intervals[i + 1][1] = intervals[i][1];
    }
    }

    /*左区间的右边界小于右区间的左边界,则左区间不能与右区间合并,将左区间添加到结果数组中。*/
    else
    {
    list.Add(intervals[i]);
    }
    }
    /*将数组中最后一个元素添加到结果中。*/
    list.Add(intervals[intervals.Length - 1]);

    int[][] result = list.ToArray();
    return result;
    }

    作者:somnus-23
    链接:https://leetcode-cn.com/problems/merge-intervals/solution/he-bing-qu-jian-qu-jian-zuo-bian-jie-pai-xu-bian-l/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    DotNet的JSON序列化与反序列化
    DotNet指定文件显示的尺寸
    将文本文件的内容存储在DataSet中的方法总结
    Apple的LZF算法解析
    DotNet常用排序算法总结
    C#创建安全的字典(Dictionary)存储结构
    C#创建安全的栈(Stack)存储结构
    转化代码:添加在您网页中用户触发转化行为之后的地方。添加方法
    nginx配置ThinkPHP5二级目录访问
    好久没写原生的PHP调用数据库代码了分享个
  • 原文地址:https://www.cnblogs.com/sailing92/p/15092377.html
Copyright © 2020-2023  润新知