合并两个数组

  1. 输入:[1,2,3],[2,5,6]
  2. 返回值:[1,2,2,3,5,6]
  1. // 解题思路:
  2. 因为内存限制,不能增加额外的数组,需要对数组A扩容。
  3. 然后从大到小,依次添加到数组A
  4. function merge( A, m, B, n ) {
  5. if(!B.length) return A
  6. // write code here
  7. A.sort((a,b)=>a-b)
  8. B.sort((a,b)=>a-b)
  9. // 对数组A扩容
  10. A.length == m+n;
  11. let i=m-1,j=n-1;
  12. let index = m+n-1;
  13. while(index>=0) {
  14. if(i <=-1 || A[i]<= B [j]) {
  15. A[index--]=B[j--]
  16. }
  17. if(j<=-1 || A[i]>B[j]) {
  18. A[index--]=A[i--]
  19. A[i] == undefined
  20. }
  21. }
  22. return A
  23. }

合并区间

  1. 输入:[[10,30],[20,60],[80,100],[150,180]]
  2. 返回值:[[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
}