[56]合并区间

本文介绍了一种在Go语言中对区间数组进行合并和去重的算法,首先通过快速排序对区间按起始坐标排序,然后逐个检查并合并重叠区间,最后移除重复区间,得到最终不重叠的区间数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

package main

func merge(intervals [][]int) [][]int {

	length := len(intervals)
	//按照各切片的起始坐标进行排序
	quickSort(intervals, 0, length-1)

	//合并
	for i := 1; i < length; i++ {
		if intervals[i][0] >= intervals[i-1][0] && intervals[i][0] <= intervals[i-1][1] {
			intervals[i][0] = intervals[i-1][0]
			if intervals[i][1] <= intervals[i-1][1] {
				intervals[i][1] = intervals[i-1][1]
			} else {
				intervals[i-1][1] = intervals[i][1]
			}
		}
	}

	//	去重
	j := 1
	for i := 1; i < length; i++ {
		if intervals[i][0] != intervals[i-1][0] {
			intervals[j] = intervals[i]
			j++
		} else {
			if intervals[i][1] > intervals[i-1][1] {
				intervals[j-1][1] = intervals[i][1]
			}
		}
	}
	intervals = intervals[0:j]
	return intervals
}
func quickSort(q [][]int, l, r int) {
	if l >= r {
		return
	}
	i := l - 1
	j := r + 1
	mid := q[l+(r-l)/2][0]
	for i < j {
		for {
			i++
			if q[i][0] >= mid {
				break
			}
		}
		for {
			j--
			if q[j][0] <= mid {
				break
			}
		}
		if i < j {
			q[i], q[j] = q[j], q[i]
		}
	}
	quickSort(q, l, j)
	quickSort(q, j+1, r)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值