Задача: Отрезки пересечения отрезков 

Задача: Отрезки пересечения отрезков 

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
}




Report Page