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;
        }
    }
    

      运行结果:

  • 相关阅读:
    Unknown type name 'class'; did you mean 'Class'? 问题的解决
    pxe+kickstart无人值守批量安装linux
    从图片中的一点取色
    结合UIImageView实现图片的移动和缩放
    把UIColor对象转化成UIImage对象
    iPhone:constrainedToSize获取字符串的宽高 自定义label的高度和宽度
    UITextField详解
    Iphone通过viewDidLoad设置拉伸图像与按钮样式
    iPhone 利用CG API画一个饼图(Pie chart)
    UILabel详解
  • 原文地址:https://www.cnblogs.com/jifeng0902/p/13360802.html
Copyright © 2011-2022 走看看