力扣 56. 合并区间 Java题解

题目描述

目录

题目描述

 做题思路

代码


 做题思路

这道题很容易想到从前往后遍历然后判断是否重合,然后重新设置区间的两个端点合并区间。

但是有一种可能是最后一个区间可能和第一个区间重合那么你按顺序只比较相邻的两个这种做法是很显然不对的

为来避免着这种情况,我们先把数组按照它的左端点升序排序,然后在依次遍历判断当前区间是否和前面的区间是否重合然后合并

排完序后就是具体实现思路

设置一个ArrayList集合 list 存放 一个不会和其他区间重合的区间(区间用用两个端点star end表示)。

先让 star end 为第一个区间的两个端点,如果第二个区间和第一个区间重合

那么intervals[1][0]<intervals[0][0]  然后用end =Math.max(end,intervals[1][1])来决定合并后区间的后端点

如果第一个区间和第二个区间不重合那么将star end存入list集合中,然后将star end'的值改成第二个区间左右端点的值重复上述操作

代码

class Solution {
    public void swap(int[][]a,int i,int j){
        int t=a[i][0];
        a[i][0]=a[j][0];
        a[j][0]=t;
        t=a[i][1];
        a[i][1]=a[j][1];
        a[j][1]=t;

    }
    public int max(int a,int b){
        return a>b?a:b;
    }
    public int min(int a,int b){
        return a<b?a:b;
    }
    public int[][] merge(int[][] intervals) {
int len = intervals.length;
for(int i=0;i<len;i++){
    for(int j=0;j<len-1-i;j++){
        if(intervals[j][0]>intervals[j+1][0]){
            swap(intervals,j+1,j);
        }
    }
}
ArrayList<Integer> list = new ArrayList<>();
int sart=intervals[0][0];
int end=intervals[0][1];
if(0==len-1){
   list.add(sart);
   list.add(end);
    }
for(int i=1;i<len;i++){
    //判断当前区间和上一个区间是否重叠
    int s=intervals[i][0];
    int e=intervals[i][1];
    if(s>=sart&&s<=end){

end=max(end,e);
if(i==len-1){
    list.add(sart);
    list.add(end);
}
    }
    else {
list.add(sart);
    list.add(end);
    sart=intervals[i][0];
    end=intervals[i][1];
    if(i==len-1){
    list.add(sart);
    list.add(end);
}
    }
}
int k=0;
int[][] dp=new int[list.size()/2][2];
for(int i=0;i<list.size();i=i+2){//最后将list存的值成对的转发为二维数组
    dp[k][0]=list.get(i);
    dp[k++][1]=list.get(i+1);

}
return dp;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值