【LeetCode】 56. Merge Intervals 合并区间(Medium)(JAVA)
题目地址: https://leetcode.com/problems/merge-intervals/
题目描述:
Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
题目大意
给出一个区间的集合,请合并所有重叠的区间。
解题方法
对数组进行排序,遍历一遍,合并区间
class Solution {
public int[][] merge(int[][] intervals) {
if (intervals.length <= 0 || intervals[0].length <= 1) return new int[][]{};
Arrays.sort(intervals, new Comparator<int[]>() {
public int compare(int[] a, int[] b) {
return a[0] == b[0] ? a[1] - b[1] : a[0] - b[0];
}
});
int len = 1;
for (int i = 1; i < intervals.length; i++) {
if (intervals[i][0] > intervals[len - 1][1]) {
swap(intervals, len, i);
len++;
} else if (intervals[i][1] > intervals[len - 1][1]) {
intervals[len - 1][1] = intervals[i][1];
}
}
int[][] res = new int[len][2];
for (int i = 0; i < len; i++) {
res[i] = intervals[i];
}
return res;
}
public void swap(int[][] intervals, int i, int j) {
if (i == j) return;
int[] temp = intervals[i];
intervals[i] = intervals[j];
intervals[j] = temp;
}
}
执行用时 : 7 ms, 在所有 Java 提交中击败了 86.03% 的用户
内存消耗 : 42.4 MB, 在所有 Java 提交中击败了 47.08% 的用户