数据结构-合并区间

题目信息-合并区间

这道题目是leetcode中的编号56,大意是给出一个区间的集合,请合并所有重叠的区间。
示例1:
    输入: [[1,3],[2,6],[8,10],[15,18]]
    输出: [[1,6],[8,10],[15,18]]
    解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例2:
    输入: [[1,4],[4,5]]
    输出: [[1,5]]
    解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间

解题思路

首页把集合按照集合的下限按照从小到大排序,然后分别取出经过排序后数组中的首个集合上限和下限进行赋值。然后再把该数组从下标为1的地方开始遍历,如果保存的上限小于遍历数组集合的下限并且数组集合的上限大与保存的上限,则用遍历集合的上限替换之前保存的上限,如果保存的上限小于遍历集合的下限,则把遍历集合加入到目标数组中,直至遍历结束

代码

func mergeElement(_ intervals: [[Int]]) -> [[Int]] {
    if intervals.count <= 1 {
        return intervals;
    }
    // 用swift自带排序,把集合按照下限进行排序
    let sortIntervals = intervals.sorted { $0.first! < $1.first!};
    var newIntervals = [[Int]]();
    
    // 保存首个集合的上限和下限
    var leftElement = sortIntervals.first!.first!;
    var rightElement = sortIntervals.first!.last!;
    
    // 从排序数组的下标为1开始遍历
    for element in sortIntervals[1...] {
        // 如果保存的上限大于该集合的下限,并且小于该集合的上限
        if rightElement >= element.first! {
            if rightElement <= element.last! {
                // 替换保存的上限
                rightElement = element.last!;
            }
        } else {
            // 否则把集合加入到目标数组,并替换保存的上限与下限
            newIntervals.append([leftElement, rightElement]);
            leftElement = element.first!;
            rightElement = element.last!;
        }
    }
    newIntervals.append([leftElement, rightElement]);
    
    return newIntervals;
}

题目链接

posted @ 2020-04-17 17:24  木子沉雨  阅读(239)  评论(0编辑  收藏  举报