合并两个数组
输入:[1,2,3],[2,5,6]
返回值:[1,2,2,3,5,6]
// 解题思路:
因为内存限制,不能增加额外的数组,需要对数组A扩容。
然后从大到小,依次添加到数组A
function merge( A, m, B, n ) {
if(!B.length) return A
// write code here
A.sort((a,b)=>a-b)
B.sort((a,b)=>a-b)
// 对数组A扩容
A.length == m+n;
let i=m-1,j=n-1;
let index = m+n-1;
while(index>=0) {
if(i <=-1 || A[i]<= B [j]) {
A[index--]=B[j--]
}
if(j<=-1 || A[i]>B[j]) {
A[index--]=A[i--]
A[i] == undefined
}
}
return A
}
合并区间
输入:[[10,30],[20,60],[80,100],[150,180]]
返回值:[[10,60],[80,100],[150,180]]
function merge( intervals ) {
const len = intervals.length
// 排除掉小于1项的情况
if(len<=1) return intervals
const arr = []
// 排序,保证前面的start大于后面的start
intervals.sort((a,b)=>a.start-b.start)
通过reduce保证能访问到前面的合并区间
intervals.reduce((pre,cur,index)=> {
let {start:li,end:ri} = pre
let { start:lj,end:rj }= cur
if(ri>=lj) cur = { start: li,end: Math.max(ri,rj)}
if (lj>ri) arr.push(pre)
// 当遍历到最后一个区间时,把区间推入数组
if(index == len-1) arr.push(cur)
return cur
})
return arr
}