题目:
思路:排序+双指针
- 对区间的 start 进行排序;
- 第 i 个区间作为基准,和 第 i+1个区间比较,【当两区间重叠时】,并且 i+1 还不是最后一个区间时,贪心选择 R的最大值,所以要用
while
; - 【当 i 和 i+1 区间不重叠】,或者 i是最后一个区间时,添加到 r !
class Solution {
public int[][] merge(int[][] intervals) {
// 按照 start 排序
Arrays.sort(intervals, new Comparator<int[]>(){
public int compare(int[] a,int[] b){
return Integer.compare(a[0],b[0]);
}
});
List<int[]> r=new ArrayList<>();
int i=0;
int n=intervals.length;
while(i<n){
// 第 i 个区间作为基准;
int L=intervals[i][0];
int R=intervals[i][1];
while(i<n-1 && intervals[i+1][0]<=R){ / i+1和i 重叠时,并注意防止越界
i++;
// 第i+1个区间;
R=Math.max(R,intervals[i][1]);
}
// 1.i+1和i不重叠; 2. i已经是最后一个区间,i+1越界
r.add(new int[]{L,R});
i++;
}
int[][] res=r.toArray(new int[r.size()][]);
return res;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89173.html