概述
给出一个区间数组,其中区间[i]=[starti, endi]。我们必须找出最小数量的区间,以便使区间数组中的区间不重叠。
让我们通过一个例子来理解它
Input: intervals = [[2,3],[3,4],[4,5],[2,4]]
Output: 1
Explanation: [2,4] can be removed and the rest of the intervals are non-overlapping.
我们的想法是,首先根据间隔的开始时间进行排序,然后计算重叠的间隔。
程序
以下是相同的程序。
package main
import (
"fmt"
"sort"
)
func eraseOverlapIntervals(intervals [][]int) int {
lenIntervals := len(intervals)
sort.Slice(intervals, func(i, j int) bool {
return intervals[i][0] < intervals[j][0]
})
prevIntervalEnd := intervals[0][1]
minIntervals := 0
for i := 1; i < lenIntervals; i++ {
currentIntervalStart := intervals[i][0]
currentIntervalEnd := intervals[i][1]
if currentIntervalStart < prevIntervalEnd {
minIntervals++
if prevIntervalEnd >= currentIntervalEnd {
prevIntervalEnd = currentIntervalEnd
}
} else {
prevIntervalEnd = currentIntervalEnd
}
}
return minIntervals
}
func main() {
output := eraseOverlapIntervals([][]int{{2, 3}, {3, 4}, {4, 5}, {2, 4}})
fmt.Println(output)
}
输出
6
13