import Foundation
func hasOverlap(_ intervals: [(Int, Int)]) -> Bool {
if intervals.isEmpty {
return true
}
// Sorting is essential because once intervals are ordered by
// start time, any overlap can only occur between adjacent intervals.
let sorted = intervals.sorted { $0.0 < $1.0 }
// (5,9), (11,12), (15,17)
// (5,9) and (11,12) → 11 < 9? No
// (11,12) and (15,17) → 15 < 12? No
// The loop compares each interval with the one before it.
for i in 1..<sorted.count {
if sorted[i].0 < sorted[i - 1].1 {
return false // Overlap found
}
}
return true // No overlap
}
func main() {
let intervals: [(Int, Int)] = [
(11, 12),
(5, 9),
(15, 17)
]
if hasOverlap(intervals) {
print("There are NO overlapping intervals")
} else {
print("There ARE overlapping intervals")
}
}
main()
/*
run:
There are NO overlapping intervals
*/