七叶笔记 » golang编程 » 剑指Offer Golang 实现合并区间算法

剑指Offer Golang 实现合并区间算法

随笔记录,合并区间并不难,如果是初次接触golang,切片的排序可能是比较棘手的问题,可以使用golang自带的sort.Slice排序具体的实现可以看代码。

合并的思想:

1、首先对全部的区间数据进行排序,排序过后的区间进行下算法比较;

2、区间1的结束位置也就是代码中的tmp, 大于等于 区间2二的起始位置,区间2就是代码中的 j = i+1,满足以上条件可以合并,从区间1和区间2的结束中找最大的并修改,继续查找。

2、j 开启新一轮区间的合并。

 func TestMege(t *testing.T) {
	data := [][]int{
		{1, 3},
		{4, 5},
		{8, 10},
		{2, 6},
		{9, 12},
		{15, 18},
	}

	merged := [][]int{}

	sort.Slice(data, func(i, j int) bool {
		return data[i][0] < data[j][0]
	})

	for i := 0; i < len(data); {
		tmp := []int{data[i][0], data[i][1]}
		j := i + 1
		for j < len(data) && data[j][0] <= tmp[1] {
			tmp[1] = QMax(tmp[1], data[j][1])
			j++
		}

		merged = append(merged, tmp)

		i = j
	}

	fmt.Println(merged)

}

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

	return b
}  

相关文章