题目链接:https://leetcode.cn/problems/merge-intervals/description/?envType=study-plan-v2&envId=top-100-liked
排序
按照左端点升序排序,如果当前区间左端点小于或等于前面那个区间右端点,那就加入前面那个区间,否则新建一个区间
class Solution {
public int[][] merge(int[][] intervals) {
//按照左端点升序排序
Arrays.sort(intervals, new Comparator<int[]>(){
public int compare(int[] val1, int[] val2){
return val1[0] - val2[0];
}
});
//存储答案
List<int[]> m = new ArrayList<int[]>();
//遍历数组
for(int i = 0; i < intervals.length; i++){
//左右端点
int l = intervals[i][0], r = intervals[i][1];
//如果没有元素或者当前左端点大于上个区间右端点,新建一个区间
if(m.size() == 0 || m.get(m.size() - 1)[1] < l){
m.add(new int[]{l, r});
}else{ //合并区间,取右端点最大值
m.get(m.size() - 1)[1] = Math.max(m.get(m.size() - 1)[1], r);
}
}
return m.toArray(new int[m.size()][]);
}
}
还剩86题!