Java 实现拼车算法:判断是否能接送所有乘客
Java 实现拼车算法:判断是否能接送所有乘客
问题描述:
一辆车上有 capacity 个空座位。车只能向一个方向行驶(也就是说,不允许掉头或改变方向)。
给定整数 capacity 和一个数组 trips,trips[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 个乘客,接他们和放他们的位置分别是 fromi 和 toi。这些位置是从汽车的初始位置向东的公里数。
当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false。
思路:
模拟整个行驶过程,统计每个位置上的乘客数,判断是否超过了容量。
具体步骤:
- 定义一个长度为 1001 的数组
passengers,用于统计每个位置上的乘客数,初始值为 0。 - 遍历
trips数组,对于每一次旅行,将该段路程上的乘客数加到对应位置上,并判断是否超过了车的容量,如果超过了则返回false。 - 如果所有旅行都能够完成,则返回
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;
}
}
代码解析:
passengers数组用于统计每个位置上的乘客数,索引表示位置,值表示该位置上的乘客数。- 循环遍历
trips数组,对于每个trip,将trip[1]位置的乘客数加上trip[0],将trip[2]位置的乘客数减去trip[0],模拟乘客上下车操作。 - 使用循环遍历
trip[1]到trip[2]之间的所有位置,判断每个位置上的乘客数是否超过了capacity,如果超过了就返回false。 - 如果所有旅行都能够完成,则返回
true。
总结:
该算法通过模拟行驶过程,统计每个位置上的乘客数,并判断是否超过了容量,有效地解决了拼车问题。代码简洁易懂,易于理解和实现。
原文地址: https://www.cveoy.top/t/topic/ovnP 著作权归作者所有。请勿转载和采集!