码迷,mamicode.com
首页 > 其他好文 > 详细

合并区间

时间:2020-02-23 19:51:00      阅读:57      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!