力扣算法之 986. 区间列表的交集

[力扣算法题] 986. 区间列表的交集(欢迎一起讨论! 😃)

class Solution {
    public static int[][] intervalIntersection(int[][] firstList, int[][] secondList) {
        
//         // BP METHOD
//         List<List<Integer>> li = new ArrayList<List<Integer>>();
//         List<Integer> list;
//         if(firstList==null || secondList== null)return null;
//         System.out.println("h1");

//         for(int i=0; i<firstList.length; ++i){
//             for(int j=0; j<secondList.length; ++j){

                
//                 li = compare(firstList[i], secondList[j], li);
//             }
//         }

//         // 去重
//         for(int i=1; i<li.size(); ++i){
//             List<Integer> a = li.get(i-1);
//             List<Integer> b = li.get(i);
//            System.out.println("a: "+a);
//            System.out.println("b: "+b);
//             if(a.get(0)==b.get(0)){
//                 li.remove(b);
//             }
//         }

//         if(li.size()==0)return new int[][]{};
//         int[][] a = new int[li.size()][li.get(0).size()];
//                 for (int i = 0; i < li.size(); i++) {
//             Integer[] b = li.get(i).toArray(new Integer[li.get(i).size()]);
//             for (int j = 0; j < li.get(i).size(); j++) {
//                 a[i][j] = b[j];
//             }
//         }

//         return a;
//         // BP METHOD
        
        // type code of the optimization method follow the official website's resolution by myself
        // I have to say this is awesome!!!
        List<int []> result = new ArrayList();
        int l1 = 0, l2 =0;
        
        while(l1 < firstList.length && l2 < secondList.length){
            int left = Math.max(firstList[l1][0], secondList[l2][0]);
            int right = Math.min(firstList[l1][1], secondList[l2][1]);
            if(left <= right){
                result.add(new int[]{left, right});
            }
            
            if(firstList[l1][1] < secondList[l2][1]){
                l1++;
            }else{
                l2++;
            }
        }
        return result.toArray(new int[result.size()][]);
    }
    // type code of the optimization method follow the official website's resolution by myself

    public static List<List<Integer>> compare(int []firstList, int []secondList, List<List<Integer>> li){
        List<Integer> list;

        if(firstList[1]<secondList[0] || secondList[1]<firstList[0]){ // 无交集
            return li;
        }else{
            if(firstList[1]>secondList[0] && firstList[1]<secondList[1] && firstList[0]<secondList[0]){
                list = new ArrayList<>();
                list.add(secondList[0]);
                list.add(firstList[1]);
                li.add(list);
            }else if(secondList[1]>firstList[0] && secondList[1]<firstList[1] && secondList[0]<firstList[0]){
                list = new ArrayList<>();
                list.add(firstList[0]);
                list.add(secondList[1]);
                li.add(list);
            }else if(firstList[0]<=secondList[0] && firstList[1]>=secondList[1]){
                list = new ArrayList<>();
                list.add(secondList[0]);
                list.add(secondList[1]);
                li.add(list);
            }else if(secondList[0]<=firstList[0] && secondList[1]>=firstList[1]){
                list = new ArrayList<>();
                list.add(firstList[0]);
                list.add(firstList[1]);
                li.add(list);
            }
            else if(secondList[1]==firstList[0] || secondList[0]==firstList[1]){
                if(secondList[1]==firstList[0] ){
                    list = new ArrayList<>();
                    list.add(secondList[1]);
                    list.add(secondList[1]);
                    li.add(list);
                }else{
                    list = new ArrayList<>();
                    list.add(firstList[1]);
                    list.add(firstList[1]);
                    li.add(list);
                }
            }
        }

        return li;
    }
}

在这里插入图片描述在这里插入图片描述

最后,我不得不说,官网的思路是真的棒!感谢官网的题解 😃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值