package LeetCode_56
/**
* 56. Merge Intervals
* https://leetcode.com/problems/merge-intervals/description/
*
* Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
* */
class Solution {
fun merge(intervals: Array<IntArray>): Array<IntArray> {
if (intervals == null || intervals.size <= 1) {
return intervals
}
val result = ArrayList<IntArray>()
/*
* for example: [[1,4],[0,4]],
* after sort: [[0,4],[1,4]]
* */
intervals.sortWith(Comparator { a, b -> a[0] - b[0] })
/*for (item in intervals){
item.forEach { print(it) }
}*/
for (i in intervals.indices) {
//if current start > prev.end, insert into new one
if (result.size == 0 || intervals[i][0] > result.get(result.size - 1)[1]) {
result.add(intervals[i])
} else {
//change the end value of the last element
result.get(result.size - 1)[1] = Math.max(result.get(result.size - 1)[1], intervals[i][1])
}
}
val size = result.size
val resultArray = Array(size, { IntArray(2) })
for (i in 0 until size) {
resultArray.set(i, result.get(i))
}
return resultArray
}
}