zoukankan      html  css  js  c++  java
  • LeetCode#56-合并区间

    package shuzu;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.List;
    
    /*
    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] 可被视为重叠区间。
     */
    public class p56 {
        public int[][] merge(int[][] intervals) {
            ArrayList<List<Integer>>arrayList=new ArrayList<>();
            Arrays.sort(intervals, new Comparator<int[]>() {
                @Override
                public int compare(int[] o1, int[] o2) {
                    return o1[0]-o2[0];
                }
            });
            int ans[][]=new int[0][0];
            if(intervals==null||intervals.length==0)return ans;
            int i=0;
            while (i<intervals.length-1){
                if(canUnion(intervals[i],intervals[i+1])){//如果能够合并就合并
                    intervals[i+1]=Union(intervals[i],intervals[i+1]);
                    i++;
                }
                else {//不能合并
                    ArrayList<Integer>list=new ArrayList<>();
                    list.add(intervals[i][0]);
                    list.add(intervals[i][1]);
                    arrayList.add(list);
                    i++;
                }
            }
            if(!canUnion(intervals[intervals.length-2],intervals[intervals.length-1])){
                ArrayList<Integer>list=new ArrayList<>();
                list.add(intervals[intervals.length-1][0]);
                list.add(intervals[intervals.length-1][1]);
                arrayList.add(list);
            }
            int res[][]=new int[arrayList.size()][2];
            for(int j=0;j<arrayList.size();j++){
                res[j][0]=arrayList.get(j).get(0);
                res[j][1]=arrayList.get(j).get(1);
            }
            return res;
    
        }
        public boolean canUnion(int []num1,int []num2){//判断两个区间数组能否合并
            if(num1[1]>=num2[0])return true;
            return false;
        }
        public int [] Union(int []num1,int []num2){//合并两个区间
            int res[]=new int[2];
            res[0]=num1[0]<num2[0]?num1[0]:num2[0];
            res[1]=num1[1]>num2[1]?num1[1]:num2[1];
            return res;
        }
    }
    

      运行结果:

  • 相关阅读:
    ajax加载数据字典下拉选后台
    【算法】二叉树前中后序的递归+迭代(java代码)
    【设计模式】代理模式与装饰器模式的区别
    《重构》读书笔记(一)
    【服务器安全】记一次处理挖矿病毒经历
    【计算机原理】数值存储计算基本理论(一)
    【JAVA】java中类的执行顺序
    【numpy&pandas】Pandas速查笔记
    【前端】打包vue项目到nginx过程
    【服务器搭建】Linux下安装docker
  • 原文地址:https://www.cnblogs.com/jifeng0902/p/13360802.html
Copyright © 2011-2022 走看看