您的位置 首页 java

LeetCode算法第56题:合并区间

问题描述:

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]

输出: [[1,6],[8,10],[15,18]]

解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入: [[1,4],[4,5]]

输出: [[1,5]]

解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

思路:

首先对给定的而为数组按照第一个元素从小到大排序,然后对数组的元素逐个遍历。相邻的两个以为数组表示的范围由如下3种情况:

1、 |____________|

|_______|

2、 |____________|

|____________|

3、 |____________|

|_______|

对第1、2两种情况,需要合并数组区间。

java代码:

public int[][] merge(int[][] intervals) {
 if(null == intervals || intervals. length  == 0 || intervals[0].length == 0){
 return intervals;
 } 
 
 Arrays.sort(intervals, new Comparator<int[]>() {
 @ Override 
 public int compare(int[] one, int[] two) {
 if (one[0] > two[0]) {
 return 1;
 } else if (one[0] < two[0]) {
 return -1;
 } else {
 return 0;
 }
 }
 });
 int[][] result = new int[intervals.length][intervals[0].length];
 int cnt = 0;
 int [] cur = intervals[0];
 for(int i = 1; i < intervals.length ; i ++){
 int [] arr = intervals[i];
 if(arr[0] <= cur[1] && arr[1] >= cur[1]){
 cur[1] = arr[1];
 }else if(arr[0] >= cur[0] && arr[1] <= cur[1]){
  continue ;
 }else{
 result[cnt++] = cur;
 cur = arr;
 }
 }
 result[cnt++] = cur;
 return Arrays.copyOf(result,cnt);
 }
 

文章来源:智云一二三科技

文章标题:LeetCode算法第56题:合并区间

文章地址:https://www.zhihuclub.com/197124.shtml

关于作者: 智云科技

热门文章

网站地图