0%

LeetCode.合并区间

给出一个区间的集合,请合并所有重叠的区间。

  • 示例 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
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    object MergeRange {

    def main(args: Array[String]): Unit = {
    merge(Array(Array(1, 2), Array(3, 5), Array(4, 8))).foreach(a => println(a(0), a(1)))
    merge(Array(Array(1, 4), Array(2, 3))).foreach(a => println(a(0), a(1)))
    merge(Array(Array(1, 3), Array(8, 10), Array(2, 6), Array(10, 18))).foreach(a => println(a(0), a(1)))
    }

    def merge(intervals: Array[Array[Int]]): Array[Array[Int]] = {
    val sorted = intervals.sortWith(_ (0) < _ (0))
    val res = new ListBuffer[Array[Int]]()
    var i = 0
    var j = 1
    while (j < sorted.length) {
    if (sorted(i)(1) >= sorted(j)(0)) {
    sorted(i)(1) = Math.max(sorted(i)(1), sorted(j)(1))
    j += 1
    } else {
    res += sorted(i)
    i = j
    j += 1
    }
    }

    res += sorted(i)
    res.toArray
    }
    }