Every day a Leetcode
题目来源:1094. 拼车
解法1:差分数组
对于本题,设 a[i] 表示车行驶到位置 i 时车上的人数。我们需要判断是否所有 a[i] 都不超过 capacity。
trips[i] 相当于把 a 中下标从 fromi 到 toi−1 的数都增加 numPassengersi。这正好可以用上面讲的差分数组解决。
代码:
/** @lc app=leetcode.cn id=1094 lang=cpp** [1094] 拼车*/// @lc code=start
class Solution
{
public:bool carPooling(vector<vector<int>> &trips, int capacity){vector<int> diff(1001, 0);for (vector<int> &trip : trips){int numPassengers = trip[0], from = trip[1], to = trip[2];diff[from] += numPassengers;diff[to] -= numPassengers;}int passengers = 0;for (int &d : diff){passengers += d;if (passengers > capacity)return false;}return true;}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n+U),其中 n 是数组 trips 的长度,U=max(toi)。
空间复杂度:O(U),U=max(toi)。