问题:
方法:
首先排序,使区间按起点从小到大排序。然后遍历区间,按规则(三种情况)合并区间,最后输出的即为最终结果。
具体实现:
class MergeIntervals {
fun merge(intervals: Array<IntArray>): Array<IntArray> {
val result = mutableListOf<IntArray>()
intervals.sortWith(Comparator { o1, o2 ->
o1[0] - o2[0]
})
for (interval in intervals) {
if (result.isEmpty()) {
result.add(interval)
} else {
val lastInterval = result.last()
if (lastInterval[1] < interval[0]) {
result.add(interval)
} else {
if (lastInterval[0] > interval[0]) {
lastInterval[0] = interval[0]
}
if (interval[1] > lastInterval[1]) {
lastInterval[1] = interval[1]
}
}
}
}
return result.toTypedArray()
}
}
fun main(args: Array<String>) {
val intervals = arrayOf(intArrayOf(1, 4), intArrayOf(0, 0))
val mergeIntervals = MergeIntervals()
CommonUtils.print2DIntArray(mergeIntervals.merge(intervals))
}
有问题随时沟通
网友评论