LeetCode之Merge Intervals(Kotlin)

306 阅读1分钟

问题:


方法: 首先排序,使区间按起点从小到大排序。然后遍历区间,按规则(三种情况)合并区间,最后输出的即为最终结果。

具体实现:

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))
}

有问题随时沟通

具体代码实现可以参考Github