qappleh / Interview

我是追梦赤子心,公众号「深圳湾码农」的作者,某上市集团公司高级前端开发,深耕前端领域多年,每天攻破一道题,带你从0到1系统构建web全栈完整的知识体系!
https://github.com/qappleh/Interview
1.14k stars 95 forks source link

第321题(2020-10-09):leetcode56:合并区间 (字节) #324

Open qappleh opened 3 years ago

qappleh commented 3 years ago

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入: intervals = [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

intervals[i][0] <= intervals[i][1] leetcode地址

qappleh commented 3 years ago

分析一下

前提(将数组按左边界排序)--可得到向上递增的数组

 intervals.sort(function(a,b){
    return a[0]-b[0]
  })

什么时候需要合并?

解决包含问题

以下附上全部代码

var merge = function(intervals) {
  if(intervals.length==0)
    return []
  var res=[]
  intervals.sort(function(a,b){
    return a[0]-b[0]
  })
  res.push(intervals[0])
  for(var i=1;i<intervals.length;i++){
    if(intervals[i][0]>res[res.length-1][1])
      res.push(intervals[i])
    else
      if(intervals[i][1]>res[res.length-1][1])
        res[res.length-1][1]=intervals[i][1]
  }
  return res
};