
我的思路
题目分析:
- 需要遍历所有的区间数据,我们需要对区间数据进行排序,将这个区间调整为开头元素递增的顺序。
- 然后不断遍历这个排序后的数组,不断更新新区间即可。
答题思路:
- 先排序
- 遍历排序后的每一个数组元素,然后在这个循环中遍历这个数组后续的元素,比较大小
- 更新数组
最开始的时候,我是利用这个List获取新的数组,最后将这个list转化为二维数组,但是这种方法涉及到多次的装箱和拆箱工作,且占用额外的空间
public int[][] merge(int[][] intervals) {
//对数组进行排序
Arrays.sort(intervals, (o1, o2) ->o1[0]-o2[0]);
//遍历数组进行调整
List<List<Integer>> list = new ArrayList<>();
for(int i = 0;i<intervals.length;i++){
int start = intervals[i][0];
int end = intervals[i][1];
int j =0;
for( j= i+1;j<intervals.length;j++){
if(intervals[j][0]<=end){
end = Math.max(intervals[j][1],end);//更新这个结束
}else{
break;//直接结束即可
}
}
List<Integer> ans = new ArrayList<>();
ans.add(start);
ans.add(end);
list.add(ans);
i = j-1;
}
int[][] res = list.stream()
.map(l -> l.stream().mapToInt(Integer::intValue).toArray())
.toArray(int[][]::new);
return res;
}
后续我发现可以不用新建集合,直接在原有数组上进行操作即可。
public int[][] merge(int[][] intervals) {
//对数组进行排序
Arrays.sort(intervals, (o1, o2) ->o1[0]-o2[0]);
//遍历数组进行调整
int write =0;
for(int i = 0;i<intervals.length;i++){
int start = intervals[i][0];
int end = intervals[i][1];
int j =0;
for( j= i+1;j<intervals.length;j++){
if(intervals[j][0]<=end){
end = Math.max(intervals[j][1],end);//更新这个结束
}else{
break;//直接结束即可
}
}
intervals[write][0]=start;
intervals[write][1]=end;
write++;
i = j-1;
}
return Arrays.copyOf(intervals, write);
}
灵神思路
灵神的思路和我大体一致,有几点不同。
他是利用这个List<int[]> ans = new ArrayList<>();来存储结果,并利用ans.toArray(new int[ans.size()][]);转换为二维数组。
他利用的是ans.get(m-1)[1]来获取的这个上一个区间的右端点,我是直接遍历的。
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (p, q) -> p[0] - q[0]); // 按照左端点从小到大排序
List<int[]> ans = new ArrayList<>();
for (int[] p : intervals) {
int m = ans.size();
if (m > 0 && p[0] <= ans.get(m - 1)[1]) { // 可以合并
ans.get(m - 1)[1] = Math.max(ans.get(m - 1)[1], p[1]); // 更新右端点最大值
} else { // 不相交,无法合并
ans.add(p); // 新的合并区间
}
}
return ans.toArray(new int[ans.size()][]);
}
}
作者:灵茶山艾府
链接:https://leetcode.cn/problems/merge-intervals/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
121

被折叠的 条评论
为什么被折叠?



