【每日一题】1094. 拼车

1094. 拼车 - 力扣(LeetCode)

车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向

给定整数 capacity 和一个数组 trips ,  trip[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromi 和 toi 。这些位置是从汽车的初始位置向东的公里数。

当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false

示例 1:

输入:trips = [[2,1,5],[3,3,7]], capacity = 4
输出:false

示例 2:

输入:trips = [[2,1,5],[3,3,7]], capacity = 5
输出:true

提示:

  • 1 <= trips.length <= 1000
  • trips[i].length == 3
  • 1 <= numPassengersi <= 100
  • 0 <= fromi < toi <= 1000
  • 1 <= capacity <= 105
class Solution {
    int[] nums = new int[1001];
    public boolean carPooling(int[][] trips, int capacity) {
        int[] dif = new int[1001];
        int len = trips.length;
        for(int i = 0 ;i < len ; i++) {
            int num = trips[i][0];
            dif[trips[i][1]] += num;
            dif[trips[i][2]] -= num;
        }

        nums[0] = dif[0];
        if(nums[0] > capacity) return false;
        for(int i = 1 ; i < 1001;++i) {
            nums[i] = nums[i-1]+dif[i];
            if(nums[i] > capacity) return false;
        }

        return true;

    }
}

         每日一题,今天是中等题。算法有关差分数组。

        读题。可以发现题目虽然进行了包装,但本质上还是对一个路程数组里的元素进行加减的操作,同时判断操作完之后,元素值是否会出现违规的状态(超过该车的容量capacity)。所以本质上还是差分数组的题目,但题目没有给每次具体的值,但我们观察所给条件,可以发现from和to最多也就1000,我们只需要开一个1001的数组就可以满足条件了。开一个长度1001的dif数组和nums数组,nums数组用来作为最后算实际人数的数组,dif就是差分数组了,一开始没人,所以dif整个数组都是0,之后根据每次旅游进行区间人数的加减。最后根据差分数组倒推的公式,就可以算出nums的实际数值,并且对这些数值进行判断,是否会超过capacity。不会的话就满足条件,超过的话就没法送完。但要注意对nums[0]也需要进行一次判断。之后就可以返回答案了。

        差分数组等数组类算法,后续会整理到零基础算法中,敬请期待。运行后的结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值