LeetCodeNo_56

这个题是个区间合并问题,循环大法好
通过多次遍历真个数组直到区间合并数目不再发生变化。在每次更新后都将新的区间上下限值赋给合并前的区间,最后使用一个ArrayList实现去重操作,并最终再建立一个二重数组返回。

    public static int[][]merge(int[][]intervals){
        ArrayList<String>res = new ArrayList<>();
        ArrayList<int[]>res3=new ArrayList<>();
//        boolean flag[]=new boolean[intervals.length];
        int change=0;
        int lastchange=-1;
        while(change!=lastchange) {
            lastchange=change;
            change=0;
            boolean flag[]=new boolean[intervals.length];
            for (int i = 0; i < intervals.length; i++) {
                int upper = intervals[i][1];
                int lower = intervals[i][0];
                if (!flag[i]) {
                    for (int j = 0; j < intervals.length; j++) {
                        if (!flag[j] && j != i) {
                            if ((intervals[j][1] >= upper && intervals[j][0] <= upper) ||
                                    (intervals[j][1] >= lower && intervals[j][0] <= lower) ||
                                    (intervals[j][0] >= lower && intervals[j][1] <= upper)) {
                                upper = Math.max(upper, intervals[j][1]);
                                lower = Math.min(lower, intervals[j][0]);
                                flag[j] = true;
                                intervals[j][0] = lower;
                                intervals[i][0] = lower;
                                intervals[j][1] = upper;
                                intervals[i][1] = upper;
                                change++;
                            }
                        }
                    }
                }
                flag[i]=true;
            }
        }
        for(int i=0;i<intervals.length;i++){
            String st=String.valueOf(intervals[i][0])+String.valueOf(intervals[i][1]);
            if(!res.contains(st)){
                res.add(st);
                res3.add(intervals[i]);
            }
        }
        int[][]res2=new int[res.size()][2];
        for(int i=0;i<res.size();i++){
            int[]temp=res3.get(i);
            res2[i][0]=temp[0];
            res2[i][1]=temp[1];
        }
        return res2;
    }

本来这个题是没啥可写的,但是让我意外的是我这随便瞎套循环写的代码效果还不错。
LeetCodeNo_56_第1张图片

你可能感兴趣的:(leetCode,刷题)