标签:max 范围 元素 fir etc 扫描线 cti 参与 方式
合并区间。题意是给一个二维数组,其中每个元素给的是一个类似[start, end]的范围。要求把这些区间尽可能地merge在一起。这题又是用到扫描线的思想。首先需要根据start对input排序,然后从第二个interval SECOND开始,跟其之前的interval FIRST作比较。比较的方式是
时间O(nlogn) - 因为有sort了input
空间O(n) - 存放了最后的输出
1 /** 2 * @param {number[][]} intervals 3 * @return {number[][]} 4 */ 5 var merge = function(intervals) { 6 // 1. Sort 7 intervals.sort((a, b) => a[0] - b[0]); 8 // 2. Traverse 9 if (!intervals.length) { 10 return []; 11 } 12 let begin = intervals[0][0], 13 end = intervals[0][1]; 14 let res = []; 15 16 for (let i = 1; i < intervals.length; i++) { 17 if (intervals[i][0] > end) { 18 res.push([begin, end]); 19 begin = intervals[i][0]; 20 end = intervals[i][1]; 21 } else { 22 end = Math.max(end, intervals[i][1]); 23 } 24 } 25 res.push([begin, end]); 26 return res; 27 };
[LeetCode] 56. Merge Intervals
标签:max 范围 元素 fir etc 扫描线 cti 参与 方式
原文地址:https://www.cnblogs.com/aaronliu1991/p/11774880.html