标签:UNC pack 区间 val 原来 for 合并 turn 适合
package main import "fmt" func merge(intervals [][]int) [][]int { var arr [][]int //1.先把重复的区间找出来,拼接成arr2,加到arr中 //2.把原来的重复区间删除掉 for i := 0; i < len(intervals)-1; i++ { var arr2 []int if intervals[i][1] >= intervals[i+1][0] { arr2 = append(arr2, intervals[i][0]) arr2 = append(arr2, intervals[i+1][1]) arr = append(arr, arr2) fmt.Println("arr2", arr2) //arr := [][]int{{1, 2}, {3, 6}, {5, 10}, {11, 18}} intervals = append(intervals[:i], intervals[i+2:]...) fmt.Println("inter", intervals) } } //3.把没有重复的加到arr //4.把原来没有重复的区间删除掉 for len(intervals) > 1 { for i := 0; i < len(intervals)-1; i++ { if intervals[i][1] < intervals[i+1][0] { arr = append(arr, intervals[i]) arr = append(arr, intervals[i+1]) intervals = append(intervals[:i], intervals[i+2:]...) fmt.Println("intervals", intervals) } } } if len(intervals) == 1 { arr = append(arr, intervals[0]) } return arr } func main() { /* 给出一个区间的集合,请合并所有重叠的区间。 示例 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] 可被视为重叠区间。 */ arr := [][]int{{1, 2}, {3, 6}, {5, 10}, {11, 18}, {100, 1000}} res := merge(arr) fmt.Println(res) for i := 0; i < len(res)-1; i++ { if res[i][1] > res[i+1][0] { res[i], res[i+1] = res[i+1], res[i] } } fmt.Println("排序后的", res) //排序后的 [[1 2] [3 10] [11 18] [100 1000]] //如果有多个连续的区间,这个代码不适合 }
标签:UNC pack 区间 val 原来 for 合并 turn 适合
原文地址:https://www.cnblogs.com/yzg-14/p/12353340.html