Skip to content

Instantly share code, notes, and snippets.

@cuber5566
Created November 19, 2019 06:44
Show Gist options
  • Save cuber5566/59ec362e16a4aa10d8ee0629876a51cf to your computer and use it in GitHub Desktop.
Save cuber5566/59ec362e16a4aa10d8ee0629876a51cf to your computer and use it in GitHub Desktop.
class Solution {
fun merge(intervals: Array<IntArray>): Array<IntArray> {
if (intervals.size < 2) return intervals
intervals.sortBy { it[0] }
var index = 1
val result = ArrayList<IntArray>()
var merge: IntArray = intervals[0]
var point: IntArray = intervals[1]
while (true) {
if (needMerge(merge, point)) {
merge = merge(merge, point)
if (index + 1 > intervals.lastIndex) {
result.add(merge)
break
} else {
point = intervals[index+1]
index+=1
}
} else {
result.add(merge)
if (index > intervals.lastIndex) {
break
} else if (index + 1 > intervals.lastIndex) {
result.add(intervals[index])
break
}
merge = intervals[index ]
point = intervals[index +1]
index += 1
}
}
return result.toTypedArray()
}
fun needMerge(input1: IntArray, input2: IntArray): Boolean {
return input1[1] >= input2[0]
}
fun merge(input1: IntArray, input2: IntArray): IntArray {
val end = if (input1[1] > input2[1]) input1[1] else input2[1]
val merge = IntArray(2)
merge[0] = input1[0]
merge[1] = end
return merge
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment