马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
标题:
以数组 intervals 表现多少个区间的集合,此中单个区间为 intervals = [starti, endi] 。请你归并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 1:
- <strong>输入:</strong>intervals = [[1,3],[2,6],[8,10],[15,18]]
- <strong>输出:</strong>[[1,6],[8,10],[15,18]]
- <strong>解释:</strong>区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
复制代码 解法:
1.排序:左端点或右端点排序;
2.根据排序后的结果,总结规律,进而得出解决这个问题的计谋;
3.贪心计谋:求并集
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Comparator;
- import java.util.List;
- public class Solution {
- public int[][]merge(int[][]intervals)
- {
- //按左端点排序
- Arrays.sort(intervals, Comparator.comparingInt(v -> v[0]));
- //合并区间,求并集
- int left=intervals[0][0],right=intervals[0][1];
- List<int[]>ret=new ArrayList<>();
- for(int i=1;i<intervals.length;i++)
- {
- int a=intervals[i][0],b=intervals[i][1];
- if(a<=right)//有重叠部分
- {
- right=Math.max(right,b);
- }
- else//不能合并
- {
- ret.add(new int[]{left,right});
- left=a;
- right=b;
- }
- }
- ret.add(new int[]{left,right});
- return ret.toArray(new int[0][]);
- }
- public static void main(String[] args) {
- Solution solution=new Solution();
- int [][]intervals=new int[][]{
- new int[]{1,3},
- new int[]{2,6},
- new int[]{8,10},
- new int[]{15,18},
- };
- int [][] merged=solution.merge(intervals);
- for(int[] interval:merged)
- {
- System.out.println(Arrays.toString(interval));
- }
- }
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |