JAVA中Comparator如何判断升降序(LeetCode56)

一、题目

 二、思路

将给出的区间按左端点按升序排列,将第一个区间加入到列表ans中,然后比较后续区间,若后续区间的左端点大于当前区间的右端点,直接加入ans中,否则将当前区间的右端点修改为二者右端点的较大值。

三、上代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class Media_56 {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals, new Comparator<int[]>() {
            public int compare(int[] interval1, int[] interval2) {
                return interval1[0] - interval2[0];
            }
        });
        List<int[]> ans = new ArrayList<int[]>();
        for (int[] interval : intervals) {
            int l = interval[0], r = interval[1];
            if (ans.isEmpty() || ans.get(ans.size() - 1)[1] < l) {
                ans.add(interval);
            } else {
                ans.get(ans.size() - 1)[1] = Math.max(ans.get(ans.size() - 1)[1], r);
            }
        }
        return ans.toArray(new int[ans.size()][]);
    }
}

四、看结果

五、知识点分析

5.1 Comparator如何判断升降序

 以本题代码为例

 用来比较的元素类型为int[ ],compare函数的含义为是否交换两个元素的值,如果interval1[0]>interval2[0],返回true,即交换两个元素的值。所以,经过排序后的数组为按元素索引0处的值升序排列。

5.2 将列表转化为数组

以本题为例,ans是元素类型为int[ ]的数组,将其转化为二维数组代码为

ans.toArray(new int[ans.size()][]);

toArray方法的具体内容可以自行查找学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值