26, 56. 合并区间
https://leetcode-cn.com/problems/merge-intervals/
思路:就把开始数据排序,然后判断是否能合并即可
package com.shangguigu.dachang.algrithm.A08_sort;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
/**
* @author : 不二
* @date : 2022/4/20-上午10:49
* @desc : 56. 合并区间
* https://leetcode-cn.com/problems/merge-intervals/
*
**/
public class A88_merge {
public static void main(String[] args) {
int[][] intervals = {{1, 3}, {2, 6}, {8, 10}, {15, 18}};
int[][] merge = merge(intervals);
System.out.printf(Arrays.toString(intervals));
}
public static int[][] merge(int[][] intervals) {
// int[][] temp = new int[intervals.length][intervals[0].length];
ArrayList<int[]> result = new ArrayList<>();
// 先按照每个数组的开始数字进行排序
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
// 从小到大
return o1[0] - o2[0];
}
});
for (int[] interval : intervals) {
int start = interval[0];
int end = interval[1];
// 如果为空,直接加进去
// 获取取最后一个区间,当前的开始值大于最后一个结束,直接加进去
if (result.size() == 0 || start > result.get(result.size() - 1)[1]) {
result.add(interval);
} else {
// 说明当前interval和之前记录的区间可以合并
int[] lst = result.get(result.size() - 1);
int mergeStart = lst[0];
int mergeEnd = Math.max(lst[1], end);
result.set(result.size() - 1, new int[]{mergeStart, mergeEnd});
}
}
return result.toArray(new int[result.size()][]);
}
}