Leetcode算法题【拼车】1094.拼车

一.原题如下:

在这里插入图片描述

二.解题思路

  1. 使用差分数组,构造差分数组工具类,工具类代码具体查看另一篇文章【链接如下:区间加法】
    查看差分数组工具类
  2. from相当于开区间,在开区间加上值
  3. to - 1相当于闭区间,在闭区间的下一个索引减去值;为什么要to减去1,因为to表示已经下车了(人已经不在车上了),如果要计算还停留在车上的人需要使用到上一个站点
  4. from和to的取值范围相当于数组的大小,即1 + 1000 = 1001
  5. 通过差分数组返回结果数组,最后循环判断结果数组中的值是否超过了最大载客量

三.完整题解

具体步骤请查看每个关键步骤的代码注释

    public boolean carPooling(int[][] trips, int capacity) {
        // 构造差分数组
        DifferenceHelper diff = new DifferenceHelper(new int[1001]);

        // 循环操作
        for (int[] trip : trips) {
            // 获取三元组的值、开区间、闭区间
            int val = trip[0];
            int start = trip[1];
            // end表示已经下车,所有-1才是还留在车上
            int end = trip[2] - 1;
            // 差分数组执行操作
            diff.operate(start, end, val);
        }

        // 差分数组返回结果,判断是否超载,如果是则返回false
        int[] result = diff.result();
        for (int re : result) {
            if (re > capacity) {
                return false;
            }
        }
        return true;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值