合并两个数组
输入:[1,2,3],[2,5,6]返回值:[1,2,2,3,5,6]
// 解题思路:因为内存限制,不能增加额外的数组,需要对数组A扩容。然后从大到小,依次添加到数组Afunction 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
}