处理时间段是否重叠问题

This commit is contained in:
2024-08-29 09:41:48 +08:00
parent a27c5f702f
commit 2d73dada03
2 changed files with 65 additions and 0 deletions

View File

@@ -187,3 +187,39 @@ func SplitIntoGroups(nums []int) [][]int {
return groups
}
// IsInRange 检查一个整数是否在指定的区间内
func IsInRange(number, lowerBound, upperBound int) bool {
return number >= lowerBound && number <= upperBound
}
// Interval 表示一个区间
type Interval struct {
start int
end int
}
// ByStart 实现 sort.Interface 接口,用于按区间的开始位置排序
type ByStart []Interval
func (a ByStart) Len() int { return len(a) }
func (a ByStart) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByStart) Less(i, j int) bool { return a[i].start < a[j].start }
// HasOverlap 检查切片中的所有区间是否有重叠
func HasOverlap(timeGroup [][]int) bool {
// 将切片转换为 Interval 结构体切片
var intervals []Interval
for _, interval := range timeGroup {
intervals = append(intervals, Interval{start: interval[0], end: interval[1]})
}
// 按照区间的开始位置排序
sort.Sort(ByStart(intervals))
// 检查相邻区间是否重叠
for i := 0; i < len(intervals)-1; i++ {
if intervals[i].end > intervals[i+1].start {
return true
}
}
return false
}