这一题的思路主要在于前期需要排序,后面按照耿直的思路做就好了
这里的重点在于什么时候把构成的区间push进入res数组中
错误代码
这里push进入res数组中的时机有问题,如果当前的区间与first区间不相交,则会导致first区间不会push到res中,进而导致错误
var merge = function (intervals) {
if (intervals.length <= 1) return intervals
intervals.sort((a, b) => a[0] - b[0])
let first = intervals[0]
let res = []
for (let i = 1; i < intervals.length; ++i) {
if (first[1] >= intervals[i][0]) {
first = [first[0], intervals[i][1]]
} else {
first = intervals[i]
}
res.push(first)
}
return res
};
正确代码
所以这里push进入的时机需要商榷,如果此时两个区间不相交,那就进入到了else中,在这里,就需要第一时间push进入res中,并更新first
var merge = function (intervals) {
if (intervals.length <= 1) return intervals
intervals.sort((a, b) => a[0] - b[0])
let first = intervals[0]
let res = []
for (let i = 1; i < intervals.length; ++i) {
if (first[1] >= intervals[i][0]) {
first = [first[0], Math.max(first[1], intervals[i][1])]
} else {
// 区间不相交,则push进入结果之中,并更新first
res.push(first)
first = intervals[i]
}
}
// 因为每次push进入的first都是上一轮更新好的区间
// 到最后一个区间的时候,已经跳出循环,此时需要把最后一个区间push到res中
res.push(first)
return res
};