data class Range(val start: Int, val end: Int)
fun mergeRanges(ranges: List<Range>): List<Range> {
val sorted = ranges.sortedBy { it.start }
val merged = mutableListOf<Range>()
for ((start, end) in sorted) {
if (merged.isEmpty() || start > merged.last().end) {
merged += Range(start, end)
} else {
val last = merged.last()
merged[merged.lastIndex] = Range(last.start, maxOf(last.end, end))
}
}
return merged
}
fun main() {
val ranges = listOf(
Range(302, 447),
Range(488, 489),
Range(121, 234),
Range(200, 421),
Range(140, 354)
)
val merged = mergeRanges(ranges)
println(merged)
}
/*
run:
[Range(start=121, end=447), Range(start=488, end=489)]
*/