1. 题目
2. 思路
- 先对数组进行排序,排序的依据是子数组的首个元素大小
- 遍历数组,看上一个数组的结尾数字,和下一个数组的首个数字,比较大小
- 如果有交叉或相等,那么就可以合并(合并的方式是,比较末尾数组大小,取更大的那个数字作为结尾)
- 如果没有交叉或相等,就作为新元素添加
3. 代码如下
class Facebook11 {
func merge(_ intervals: [[Int]]) -> [[Int]] {
var res = [[Int]]()
let sortedArr = intervals.sorted(by: {$0.first! < $1.first!})
let cnt = sortedArr.count
for i in 0..<cnt {
if i == 0 {
res.append(sortedArr[i])
} else {
let tempArr = sortedArr[i]
if res.last!.last! < tempArr.first! {
res.append(sortedArr[i])
} else {
var lastArr = res.last!
let preLast = lastArr.last!
let newLast = tempArr.last!
lastArr.removeLast()
lastArr.append(preLast > newLast ? preLast : newLast)
res.removeLast()
res.append(lastArr)
}
}
}
return res
}
}