连接器问题

连接器问题在这里插入图片描述

    static class Link {
        public int left;
        public int right;

        public Link(int l, int r) {
            this.left = l;
            this.right = r;
        }

    }

    public static void main(String[] args) {
        String n = "[1,10],[15,20],[18,30],[33,40]";
        String m = "[5,4,3,2]";
        String[] split1 = m.substring(1, m.length() - 1).split(",");
        List<Integer> collect = Arrays.stream(split1).map(Integer::valueOf).sorted().collect(Collectors.toList());

        String[] ns = n.substring(1, n.length() - 1).split("],\\[");
        List<Link> matrix = new ArrayList<>();
        List<Link> ms = new ArrayList<>();
        for (int i = 0; i < ns.length; i++) {
            String[] split = ns[i].split(",");
            matrix.add(new Link(Integer.valueOf(split[0]), Integer.valueOf(split[1])));
        }
        Collections.sort(matrix, (b1, b2) -> {
            return b1.left - b2.left;
        });
        for (int i = 1; i < matrix.size(); i++) {
            if (matrix.get(i - 1).right < matrix.get(i).left) {
                boolean f = true;
                for (int i1 = 0; i1 < collect.size(); i1++) {
                    if (collect.get(i1)>=(matrix.get(i).left-matrix.get(i - 1).right)){
                        f=false;
                        Link link = new Link(matrix.get(i - 1).left, matrix.get(i).right);
                        matrix.set(i,link);
                        collect.remove(i1);
                        break;
                    }
                }
                if (f){
                    ms.add(matrix.get(i - 1));
                }
            }else {
                if (matrix.get(i - 1).right < matrix.get(i).right) {
                    Link link = new Link(matrix.get(i - 1).left, matrix.get(i).right);
                    matrix.set(i,link);
                }else {
                    Link link = new Link(matrix.get(i - 1).left, matrix.get(i-1).right);
                    matrix.set(i,link);
                }
            }

        }
        ms.add(matrix.get(matrix.size()-1));
        System.out.println(ms.size());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值