LeetCode : 1094.拼车 详解,差分数组技巧

看题目:

 这题我们使用差分数组技巧来解题。

   不知道差分数组啥意思的可以看->差分数组技巧详解

 审题:

  坐位数不固定,上下车地点还有人数也不固定。

这就相当于是给了一个初始值全为0(座位开始都是空着)的数组,数组长度由最大的to决定(最后下车的人坐的距离)。题目给定 0 <= from < to <= 1000 ,那么 0 <= to <= 1000 .

所以我们就可以给定初始数组  int[1001] 

接着对差分数组操作上车下车,也就是对区间内的数据操作加减,最后推导出结果数组,循环判断是否超出坐位数量,如果有超出的,则不成立。

需要注意的是,操作to的时候,要考虑清楚,下车人是先下车后上车。

下面是Java代码:

class Solution {
    public boolean carPooling(int[][] trips, int capacity) {
        int[] nums = new int[1001];

        int toMax = 0; //用于标识最后一个下车的人的下标

        for(int i = 0; i < trips.length; i++){
            int num = trips[i][0];
            int from = trips[i][1];
            int to = trips[i][2];
            if(to > toMax){
                toMax = to;
            }
            nums[from] += num;
            //if(to+1 < nums.length){
            //nums[to+1] -= num;  不用to+1,因为拼车这个在下车先下人,然后再上人。
            if(to < nums.length){
                nums[to] -= num; 
            }
        }

        int[] res = new int[toMax+1];
        res[0] = nums[0];
        if(res[0] > capacity){ //始发站也要判断座位够不够
            return false;
        }
        for(int i = 1; i < res.length; i++){
            res[i] = res[i-1] + nums[i];
            if(res[i] > capacity){
                return false;
            }
        }
        return true;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值