leetcode 合并区间。

暂时的领悟,排序最喜欢用的三种方法,暴力破解,双指针法,排序。这是一道关于二维数组的排序题。
关于 二维数组的排序

int [][]intervals = {{1,2},{0,1},{3,4},{5,6},{2,3},{0,8}};
Arrays.sort(intervals, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        return o1[0]-o2[0]; //o1[0] - o2[0]大于0就交换顺序,说明o1>02;
    }
});
o1[0]-o2[0] 是升序

02[0]-o[1]是降序。

同时也可以改写成 java8的lambda表达式

 

Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);// o1[0] - o2[0]大于0就交换顺序```

以下为本题代码。

 

public static int[][] merge(int[][] intervals) {
        if (intervals.length==0) return new int[0][2];
        //使用lambda表达式对数组的第一个数字进行排序
        Arrays.sort(intervals, (o1,o2)-> o1[0] - o2[0]);
        //如果实现是不知道数组的长度,可以考虑使用ArrayList进行存储,再使用toArray(new int[mergeArray.size()][])进行转换
        ArrayList<int[]> mergeArray = new ArrayList<>();
        for (int i =0;i<intervals.length;i++){
            int min = intervals[i][0];
            int max = intervals[i][1];
            if (mergeArray.size()==0||mergeArray.get(mergeArray.size()-1)[1]<min)
                /*只可以new int[]{max,min},不可以new []int{min.max}*/
                mergeArray.add(new int[]{min,max});
            else if(mergeArray.get(mergeArray.size()-1)[1]<max){
                mergeArray.get(mergeArray.size()-1)[1] = max;
            }
        }
        return mergeArray.toArray(new int[mergeArray.size()][]);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值