LeetCode56.合并区间
【题目】
给出一个区间的集合,请合并所有重叠的区间。
【示例】
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
【思考】
本身思路很简单,但是需要注意区间与区间的各种包含和交叉关系,最明显的一点就是区间不一定是有序的。
所以需要先排序(根据第一个区间的第一个值排序),然后第二个区间的下标0的值小于第二个区间下标1的值的区间进行合并
排序使用sort并自定义排序方式:
这里使用的是lamda简化自定义排序方式
Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
假设传来两个值,v1 与 v2,那么他们的先后顺序以 v1[0] 比 v2[0] 的结果为准,即:若 v1[0] < v2[0] 则 v1 < v2,若 = 则 =,若 > 则 >
举一反三:
Arrays.sort(intervals, (v1, v2) -> v1[0] == v2[0] ? v2[1] - v1[1] : v1[0] - v2[0]);
表示:传来两个值 v1 与 v2,若 [0] 相同,则按 [1] 降序;若不同则按 [0] 升序。
【代码】
package LeetCode;
import java.util.ArrayList;
import java.util.Arrays;
public class LeetCode56 {
public int[][] merge(int[][] intervals) {
if (intervals==null || intervals.length==0