2021-09-28:合并区间。以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-09-28:合并区间。以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠相关的知识,希望对你有一定的参考价值。

2021-09-28:合并区间。以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。力扣56。

福大大 答案2021-09-28:

按开始位置排序。i的开始位置比之前的结束位置,需要计数。
时间复杂度:排序的。
额外空间复杂度:O(1)。原数组复用。

代码用golang编写。代码如下:

package main

import (
    "fmt"
    "sort"
)

func main() {
    intervals := [][]int{{1, 3}, {2, 6}, {8, 10}, {15, 18}}
    ret := merge(intervals)
    fmt.Println(ret)
}

func merge(intervals [][]int) [][]int {
    if len(intervals) == 0 {
        return [][]int{}
    }
    sort.Slice(intervals, func(i, j int) bool {
        return intervals[i][0] < intervals[j][0]
    })
    s := intervals[0][0]
    e := intervals[0][1]
    size := 0
    for i := 1; i < len(intervals); i++ {
        if intervals[i][0] > e {
            intervals[size][0] = s
            intervals[size][1] = e
            size++
            s = intervals[i][0]
            e = intervals[i][1]
        } else {
            e = getMax(e, intervals[i][1])
        }
    }
    intervals[size][0] = s
    intervals[size][1] = e
    size++
    return intervals[0:size]
}

func getMax(a int, b int) int {
    if a > b {
        return a
    } else {
        return b
    }
}

执行结果如下:


左神java代码

以上是关于2021-09-28:合并区间。以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的主要内容,如果未能解决你的问题,请参考以下文章

题目地址(56. 合并区间)

leetcode56 合并区间

20210422-合并区间

56. 合并区间

56. 合并区间

Java 求解合并区间