leetcode每日一题 - 56 56. 合并区间
题解
边界条件:length小于2返回参数本身
1、先拿数组中每个元素的第[0]个索引的值进行排序
2、声明变量curr,curr为当前合并的区间,初始值为intervals[0]
3、for循环,只要curr[1]>= intervals[i][0],则叠加curr。否则push进result
4、注意:执行到最后还有一个curr没输出最来,要加上才能返回
贴出代码
// 56. 合并区间
const intervals: number[][] = [
[1, 3],
[2, 6],
[8, 10],
[15, 18],
]
function merge(intervals: number[][]): number[][] {
if (intervals.length < 2) {
return intervals
}
// 需要排序
intervals.sort((a, b) => a[0] - b[0])
let curr = intervals[0] // 当前正在被合并的区间
let result: number[][] = []
for (let item of intervals) {
if (item[0] <= curr[1]) {
curr[1] = Math.max(curr[1], item[1]) //[1,4] [2,3]的情况
} else {
result.push(curr)
curr = item
}
}
//把最后的curr也push进来
if (curr.length > 0) {
result.push(curr)
}
return result
}
merge(intervals)