zoukankan      html  css  js  c++  java
  • 数据结构-合并区间

    题目信息-合并区间

    这道题目是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;
    }

    题目链接

  • 相关阅读:
    接口 多态
    继承extends (特点、重写、覆盖、应用)抽象abstract(定义、特点、细节)
    0515 面向对象 类与对象、局部、成员变量、基本、引用类型、封装 private 和this 及应用
    Eclipse 快捷键
    Flutter Framework启动代码阅读
    Flutter Widget概览
    Flutter局部状态管理
    iconfont应用
    implicit_animations.dart阅读
    Flutter异常搜集方案
  • 原文地址:https://www.cnblogs.com/muzichenyu/p/12721254.html
Copyright © 2011-2022 走看看