/**
* <p>假设你是一位顺风车司机,车上最初有 <code>capacity</code> 个空座位可以用来载客。由于道路的限制,车 <strong>只能 </strong>向一个方向行驶(也就是说,<strong>不允许掉头或改变方向</strong>,你可以将其想象为一个向量)。</p>
*
* <p>这儿有一份乘客行程计划表 <code>trips[][]</code>,其中 <code>trips[i] = [num_passengers, start_location, end_location]</code> 包含了第 <code>i</code> 组乘客的行程信息:</p>
*
* <ul>
* <li>必须接送的乘客数量;</li>
* <li>乘客的上车地点;</li>
* <li>以及乘客的下车地点。</li>
* </ul>
*
* <p>这些给出的地点位置是从你的 <strong>初始 </strong>出发位置向前行驶到这些地点所需的距离(它们一定在你的行驶方向上)。</p>
*
* <p>请你根据给出的行程计划表和车子的座位数,来判断你的车是否可以顺利完成接送所有乘客的任务(当且仅当你可以在所有给定的行程中接送所有乘客时,返回 <code>true</code>,否则请返回 <code>false</code>)。</p>
*
* <p> </p>
*
* <p><strong>示例 1:</strong></p>
*
* <pre><strong>输入:</strong>trips = [[2,1,5],[3,3,7]], capacity = 4
* <strong>输出:</strong>false
* </pre>
*
* <p><strong>示例 2:</strong></p>
*
* <pre><strong>输入:</strong>trips = [[2,1,5],[3,3,7]], capacity = 5
* <strong>输出:</strong>true
* </pre>
*
* <p><strong>示例 3:</strong></p>
*
* <pre><strong>输入:</strong>trips = [[2,1,5],[3,5,7]], capacity = 3
* <strong>输出:</strong>true
* </pre>
*
* <p><strong>示例 4:</strong></p>
*
* <pre><strong>输入:</strong>trips = [[3,2,7],[3,7,9],[8,3,9]], capacity = 11
* <strong>输出:</strong>true
* </pre>
*
* <p> </p>
*
* <p><strong>提示:</strong></p>
*
* <ul>
* <li>你可以假设乘客会自觉遵守 “<strong>先下后上</strong>” 的良好素质</li>
* <li><code>trips.length <= 1000</code></li>
* <li><code>trips[i].length == 3</code></li>
* <li><code>1 <= trips[i][0] <= 100</code></li>
* <li><code>0 <= trips[i][1] < trips[i][2] <= 1000</code></li>
* <li><code>1 <= capacity <= 100000</code></li>
* </ul>
* <div><div>Related Topics</div><div><li>数组</li><li>前缀和</li><li>排序</li><li>模拟</li><li>堆(优先队列)</li></div></div><br><div><li>👍 151</li><li>👎 0</li></div>
*/
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
//差分数组
int[] diff = new int[1001];
public boolean carPooling(int[][] trips, int capacity) {
for (int[] trip : trips) {
int val = trip[0];
int i = trip[1];
int j = trip[2] - 1;
increment(i, j, val);
}
int[] res = result();
// 客⻋⾃始⾄终都不应该超载
for (int i = 0; i < res.length; i++) {
if (capacity < res[i]) {
return false;
}
}
return true;
}
void increment(int i, int j, int val) {
diff[i] += val;
if (j + 1 < diff.length) {
diff[j+1] -= val;
}
}
int[] result() {
int[] res = new int[diff.length];
res[0] = diff[0];
for (int i = 1; i < diff.length; i++) {
res[i] = res[i - 1] + diff[i];
}
return res;
}
}
//leetcode submit region end(Prohibit modification and deletion)
# yyds干货盘点 差分数组-拼车
原创
©著作权归作者所有:来自51CTO博客作者小傻孩丶的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
#yyds干货盘点# 数组的定义
数组的定义
线性表 数组 二维数组 -
#yyds干货盘点#【yyds干货盘点】Vue 入门指南
VUE入门技术
Vue HTML 应用程序 -
#yyds干货盘点# 数组的存储结构
数组的存储结构
数组 数组元素 数据