一.原题如下:
二.解题思路
- 使用差分数组,构造差分数组工具类,工具类代码具体查看另一篇文章【链接如下:区间加法】
查看差分数组工具类 - from相当于开区间,在开区间加上值
- to - 1相当于闭区间,在闭区间的下一个索引减去值;为什么要to减去1,因为to表示已经下车了(人已经不在车上了),如果要计算还停留在车上的人需要使用到上一个站点
- from和to的取值范围相当于数组的大小,即1 + 1000 = 1001
- 通过差分数组返回结果数组,最后循环判断结果数组中的值是否超过了最大载客量
三.完整题解
具体步骤请查看每个关键步骤的代码注释
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;
}