Задача: Отрезки пересечения отрезков
https://t.me/Golang_googleУсловие: дается два массива, каждый элемент в котором представлен отрезком, значения которого соответствуют соответственно началу и концу.
Необходимо вывести результирующий массив, внутри которого будут представлены отрезки пересечения двух исходных массивов.
Пример:
Ввод: firstList = [[0,2],[5,10],[13,23],[24,25]], secondList = [[1,5],[8,12],[15,24],[25,26]]
Вывод: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
Ввод: firstList = [[1,3],[5,9]], secondList = []
Вывод: [ ]
Решение :
Go
func intervalIntersection(firstList [][]int, secondList [][]int) [][]int {
var res [][]int
if len(firstList) == 0 || len(secondList) == 0 {
return res
}
l1, l2 := 0, 0
for l1 < len(firstList) && l2 < len(secondList) {
firstListItem := firstList[l1]
secondListItem := secondList[l2]
if firstListItem[1] < secondListItem[0] {
l1++
continue
}
if secondListItem[1] < firstListItem[0] {
l2++
continue
}
low := max(firstListItem[0], secondListItem[0])
high := min(firstListItem[1], secondListItem[1])
res = append(res, []int{low, high})
if firstListItem[1] > secondListItem[1] {
l2++
} else {
l1++
}
}
return res
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func max(a, b int) int {
if a > b {
return a
}
return b
}