题目
LeetCode 1094. 拼车(median)
车上最初有 capacity
个空座位。车只能向一个方向行驶(也就是说,不允许掉头或改变方向)
给定整数 capacity
和一个数组``trips,
trip[i] = [numPassengers_i, from_i, to_i]表示第
i次旅行有
numPassengers_i乘客,接他们和放他们的位置分别是
from_i和
to_i` 。这些位置是从汽车的初始位置向东的公里数。
当且仅当你可以在所有给定的行程中接送所有乘客时,返回 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
解题思路
-
这里只要保证整个行车过程中不会超载就可以啦~
-
使用一个
map<int, int>
保存每个时间点对应的人数变化量,由于map自动排序,故第二次遍历时就是按照时间由小到大进行的 -
再次遍历map的过程中,每次让capacity(剩余容量)根据所保存的信息进行变化,如果出现
capacity < 0
(即超载),那么返回false
图示
-
不满足条件的情况
-
满足条件的情况
代码(C++实现)
class Solution {
public:
bool carPooling(vector<vector<int>>& trips, int capacity) {
map<int, int> mp;
for (auto& vec : trips) {
mp[vec[1]] -= vec[0];
mp[vec[2]] += vec[0];
}
for (auto& p : mp) {
capacity += p.second;
if (capacity < 0)
return false;
}
return true;
}
};
有收获的话,求个赞~ Click Here
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/car-pooling/