-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMergeIntervals.kt
More file actions
29 lines (24 loc) · 816 Bytes
/
MergeIntervals.kt
File metadata and controls
29 lines (24 loc) · 816 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package leetcode
/**
* Problem description on [LeetCode](https://leetcode.com/problems/merge-intervals/)
*/
class MergeIntervals {
fun merge(intervals: Array<IntArray>): Array<IntArray> {
intervals.sortBy { it[0] }
val answer = mutableListOf(intervals[0])
for (i in 1 until intervals.size) {
if (intersect(answer.last(), intervals[i])) {
mergeLast(answer.last(), intervals[i])
} else {
answer.add(intervals[i])
}
}
return answer.toTypedArray()
}
private fun intersect(interval1: IntArray, interval2: IntArray): Boolean {
return interval1[1] >= interval2[0]
}
private fun mergeLast(last: IntArray, interval: IntArray) {
last[1] = maxOf(last[1], interval[1])
}
}