Java 实现拼车算法:判断是否能接送所有乘客

问题描述:

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

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

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

思路:

模拟整个行驶过程,统计每个位置上的乘客数,判断是否超过了容量。

具体步骤:

  1. 定义一个长度为 1001 的数组 passengers,用于统计每个位置上的乘客数,初始值为 0。
  2. 遍历 trips 数组,对于每一次旅行,将该段路程上的乘客数加到对应位置上,并判断是否超过了车的容量,如果超过了则返回 false
  3. 如果所有旅行都能够完成,则返回 true

Java 代码:

class Solution {
    public boolean carPooling(int[][] trips, int capacity) {
        int[] passengers = new int[1001]; // 定义一个数组,用于统计每个位置上的乘客数
        for (int[] trip : trips) {
            passengers[trip[1]] += trip[0]; // 将该段路程上的乘客数加到对应位置上
            passengers[trip[2]] -= trip[0]; // 将该段路程下车的乘客数从对应位置上减去
            for (int i = trip[1]; i < trip[2]; i++) {
                if (passengers[i] > capacity) { // 判断是否超过了车的容量
                    return false;
                }
            }
        }
        return true;
    }
}

代码解析:

  1. passengers 数组用于统计每个位置上的乘客数,索引表示位置,值表示该位置上的乘客数。
  2. 循环遍历 trips 数组,对于每个 trip,将 trip[1] 位置的乘客数加上 trip[0],将 trip[2] 位置的乘客数减去 trip[0],模拟乘客上下车操作。
  3. 使用循环遍历 trip[1]trip[2] 之间的所有位置,判断每个位置上的乘客数是否超过了 capacity,如果超过了就返回 false
  4. 如果所有旅行都能够完成,则返回 true

总结:

该算法通过模拟行驶过程,统计每个位置上的乘客数,并判断是否超过了容量,有效地解决了拼车问题。代码简洁易懂,易于理解和实现。

Java 实现拼车算法:判断是否能接送所有乘客

原文地址: https://www.cveoy.top/t/topic/ovnP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录